代码之家  ›  专栏  ›  技术社区  ›  mobibob

如何启动android版本相关闹钟[[副本]

  •  0
  • mobibob  · 技术社区  · 14 年前

    可能重复:
    Intent to launch the clock application on android

    我有一个显示时间的小部件,如果点击它,它就会启动com.android.alarmclock/.AlarmClock 具有 PendingIntent

    Intent alarmIntent = new Intent();
    try {
        if (Class.forName("com.android.deskclock.AlarmClock") != null) {
        Log.i(TAG, "setting deskclock alarm -- must be Froyo!");
        alarmIntent.setClassName("com.android.deskclock",
            "com.android.deskclock.AlarmClock");
        }
    } catch (ClassNotFoundException e) {
        Log.i(TAG, "setting alarmclock alarm -- must be Eclair!");
        alarmIntent.setClassName("com.android.alarmclock",
            "com.android.alarmclock.AlarmClock");
    }
    PendingIntent pendingIntent = PendingIntent.getActivity(context, REQUEST_UPDATE_TIME_NOW,
        alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    views.setOnClickPendingIntent(R.id.text_timeofday, pendingIntent);
    

    它总是认为它是“Eclair”,因此在Froyo上失败了。这是最好的方法,还是应该检查应用程序级别?我更喜欢和班级一起工作。

    1 回复  |  直到 7 年前
        1
  •  3
  •   CommonsWare    14 年前

    如果(Class.forName("com.android.deskclock.AlarmClock") != (空)

    那不行,因为那个类不在你的项目中。最多,它可能在设备上的其他项目中。

    没有支持的文档 Intent 用于在Android SDK中启动闹钟。正如您所发现的,在包和类名中硬连接的方法是脆弱的。如果某些设备没有该应用程序(例如,由设备制造商提供的应用程序替换),则它将无法在这些设备上工作。另外,正如你所看到的,它可能会在Android的未来版本中发生变化。为了说服设备制造商不要破坏SDK,我经历了一段相当艰难的时间; having third-party developers do it weakens my case .

    这就是说,一般的方法,看看是否有东西会回应一个问题 意图 是用来 PackageManager (例如。, queryIntentActivities()