【发布时间】:2016-01-02 16:11:12
【问题描述】:
我正在制作一个需要重复执行某些任务的应用,通常在 1 到 5 分钟之间。
我试过.setRepeating、setInexactRepeating和.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);
}
【问题讨论】:
-
另外,您是否 100% 确定您的设备没有重新启动?因为手机重启后所有的闹钟都会消失。
-
它没有重新启动,虽然我有一个 BootReceiver 正在监听并再次设置警报。
-
PreferenceHelper.readLong(PreferenceHelper.PREF_TIME_TO_REFRESH)的近似值是多少分钟? -
对不起,这取决于用户选择,在 1 分钟到 1 小时(1m、3m、5m、15m、30m、60m)之间,无论用户选择什么值,正如我所说的那样几小时后停止射击。
-
你也可以发布你的
BroadcastReceiver代码吗?
标签: android alarmmanager alarm