如何启动android版本相关的闹钟?

如何启动android版本相关的闹钟?,android,class,android-2.2-froyo,alarms,Android,Class,Android 2.2 Froyo,Alarms,可能重复: 我有一个显示时间的小部件,如果你点击它,它就会启动com.android.alarmclock/.alarmclock活动,并带有PendingEvent。这在Froyo之前非常有效,但是有了Froyo,我必须启动com.android.deskclock/.AlarmClock。因此,我想输入检查类是否存在的代码,并启动相应的活动/意图。这是我试过的,但不起作用 Intent alarmIntent = new Intent(); try { if (Class.forN

可能重复:

我有一个显示时间的小部件,如果你点击它,它就会启动com.android.alarmclock/.alarmclock活动,并带有
PendingEvent
。这在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上失败了。这是最好的方法,还是应该检查应用程序级别?我更喜欢与阶级共存

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

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

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

也就是说,查看某事物是否会响应
意图的一般方法是使用
PackageManager
(例如
queryIntentActivities()

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

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

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


话虽如此,判断某事物是否会对
意图做出响应的一般方法是使用
PackageManager
(例如
查询活动()
)。

我完全同意您对脆弱性的评估。我正准备提出关于承运人包装的问题。谢谢你们直接告诉我这个方法。我完全同意你们对脆弱性的评估。我正准备提出关于承运人包装的问题。谢谢你直接告诉我这个方法。