1
的時間間隔後,所述AlarmManager.setInexactRepeating()函數使用API小於API 19才能正常運行,我用於API的19個向上AlarmManager.setExact()函數和使用廣播接收機執行所需任務,然後再次調用鬧鐘功能,使其成爲重複鬧鐘。警報有效,但不符合預期的重複間隔。我做了一些研究,看看其他人做了什麼,我在智慧的結尾。AlarmManager執行的任務分鐘的間隔,而不是給定的一天
我創建了一個類來處理報警,如下所示:
public class AlarmStart {
public AlarmStart() {
}
public void startAlarm(Context context) {
// Start service
if(Build.VERSION.SDK_INT < 19) {
Intent service = new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, service, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY,
pendingIntent);
}
else {
Intent intent = new Intent(context, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000 * 60 * 60 * 24, pendingIntent);
}
// Enable receiver when device boots
ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
下面是在廣播接收器類,這使得在間隔要執行的服務的呼叫(其工作良好)的代碼,然後讓另一個調用startAlarm()函數:
public class MyBroadcastReceiver extends BroadcastReceiver {
AlarmStart alarmStart = new AlarmStart();
public MyBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// Start service
Intent service = new Intent(context, MyService.class);
context.startService(service);
//Schedule next alarm
alarmStart.startAlarm(context);
}
在AndroidManifest.xml中,我設置了啓用和出口的廣播接收器的屬性爲true。
請能有人告訴我,我可能是做錯了?
我也改變爲API層級setInexactRepeating()以只需設置()<19和所使用的廣播接收機和它得到了準確的。非常感謝你 –