我有以下代码,每小时都会调用我打算"报警接收器"来执行检查
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
notificationIntent.addCategory("android.intent.category.DEFAULT");
PendingIntent broadcast = PendingIntent.getBroadcast(context,100,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR,1);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), broadcast);
Run Code Online (Sandbox Code Playgroud)
这适用于Android API 19+(Android 4.4)
但是,我想允许Android API 17(4.2)能够使用我的应用程序,因为不是每个人都可以在他们的手机上获得4.4
问题是API 17不支持的setExact
是否有一种方法可以调用被调用的Intent,这是由API 17+支持的,或者我必须以某种方式找出android运行的verison并执行一段代码或其他代码?
谢谢
Ben*_*son 18
在API级别19中改变了AlarmManager工作方式以帮助节省电池寿命.这样事件就可以进行批量处理.这意味着什么,并且将在API 19+上不准确.set()setRepeating()
在19之前的API版本中,您可以使用set,它将在确切的时间内安排警报.
不幸的是,这意味着您需要在代码中添加一个检查,以确保使用正确的方法来设置确切的警报:
@SuppressLint("NewApi")
private void setSingleExactAlarm(long time, PendingIntent pIntent) {
if (android.os.Build.VERSION.SDK_INT >= 19) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, pIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,值得一读有关 Marshmallow中引入的Doze并决定您希望应用程序如何与它一起工作.
| 归档时间: |
|
| 查看次数: |
3854 次 |
| 最近记录: |