JF0*_*001 0 android alarmmanager android-alarms
如果使用支持库 android.support.v4.app.AlarmManagerCompat 的 AlarmManagerCompat 类,则可以使用以下单一语法调用警报(适用于所有设备,无论安装的 API 级别如何,支持库提供所有以前版本的 API 的向后兼容性):
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
Run Code Online (Sandbox Code Playgroud)
或者仍然需要先验证设备上安装的 API 级别,然后根据所使用的 API 级别使用适当的语法调用警报,例如:
if (VERSION.SDK_INT >= 23) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntentMain);
// Adding manual re-scheduling for repetition
}
else if (VERSION.SDK_INT >= 19) {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntentMain);
// Adding manual re-scheduling for repetition
}
else if (VERSION.SDK_INT <= 18) {
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 60 * 60 * 24 * 7 * 1000, alarmIntentMain);
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,支持库旨在能够将更新的类与旧版本的 API 一起使用,而不必为不同的 API 编写相同功能的不同语法。我的理解正确吗?
查看 AlarmManagerCompat的源代码,它完全按照您所说的 API 级别检查:
public static void setExactAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type,
long triggerAtMillis, @NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 23) {
alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
} else {
AlarmManagerCompat.setExact(alarmManager, type, triggerAtMillis, operation);
}
}
public static void setExact(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis,
@NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(type, triggerAtMillis, operation);
} else {
alarmManager.set(type, triggerAtMillis, operation);
}
}
Run Code Online (Sandbox Code Playgroud)
因此您可以使用AlarmManagerCompat而不必担心 API 级别。
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |