0

可能重复:
打算在 android 上启动时钟应用程序

我有一个显示时间的小部件,如果点击它,它会启动 com.android.alarmclock/.AlarmClock 活动,并带有PendingIntent. 这在 Froyo 之前效果很好,但是对于 Froyo,我必须启动 com.android.deskclock/.AlarmClock。所以我想输入代码来检查类的存在并启动适当的活动/意图。这是我尝试过的,但它不起作用。

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 上失败了。这是最好的方法,还是我应该检查应用程序级别?我更喜欢与班级合作。

4

1 回答 1

3

if (Class.forName("com.android.deskclock.AlarmClock") != null)

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

没有文档支持Intent在 Android SDK 中启动闹钟。正如您所发现的,您在包名和类名中的硬连线方法很脆弱。如果某些设备没有该应用程序(例如,由设备制造商提供的应用程序替换),它将无法在某些设备上运行。另外,正如您所见,它可能会在未来的 Android 版本中发生变化。我试图说服设备制造商不要破坏 SDK 的时间已经够长了;让第三方开发人员这样做会削弱我的情况

话虽如此,查看某事是否会响应 an 的一般方法Intent是使用PackageManager(例如,queryIntentActivities())。

于 2010-08-11T22:44:43.660 回答