我正在制作一个需要重复执行某些任务的应用程序,通常需要 1 到 5 分钟。
我努力了.setRepeating
, setInexactRepeating
and .set
(最后一个任务完成后重新设置闹钟)
当警报响起时,服务就会启动。
通常情况下效果很好,但有时无论我使用什么方法,警报都会突然停止。
我已经在Android 5.1和4.4.2中进行了测试。
为什么会发生这种情况?这是一个已知的错误还是什么?
这是我用来设置闹钟的方法,注释的代码是我尝试过的另一种方法:
public void setAlarm(Context context) {
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
/*alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 1000,
PreferenceHelper.readLong(PreferenceHelper.PREF_TIME_TO_REFRESH), alarmIntent);*/
alarmMgr.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + PreferenceHelper.readLong(PreferenceHelper.PREF_TIME_TO_REFRESH), alarmIntent);
ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
正如我之前所说,如果我使用.set
当服务完成分配的任务时,我再次调用该方法。 (这也有效,但几个小时后警报突然停止响)。
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, WifiCheckerService.class);
startWakefulService(context, service);
}