java操作。启动\u已完成,但不工作
我有两个警报一个启动警报启动作业计划程序,按计划程序中所述的固定时间间隔发送通知,第二个警报用于取消作业计划程序,我想保留状态,就像我重新启动手机时,它不应取消计划程序,并按计划程序中所述的固定时间间隔发送通知
为此,我注册了一个BOOT_COMPLETE类,如下所示,但在重新启动后,我没有收到通知,不确定计划是否取消或BOOT_COMPLETE没有工作,但最终结果是重新启动后我没有收到通知
<receiver 安卓:name=".classes.ClsRestartAlarm"
安卓:enabled="true">
<intent-filter>
<action 安卓:name="安卓.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
并像这样实现了CLSRestatalarm
@Override
public void onReceive(Context context, Intent intent) {
if ("安卓.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Logging.logMessage("boot completed");
Intent i = new Intent(context, BootService.class);
context.startService(i);
}
}
和在役:
@Override
protected void onHandleIntent(Intent intent) {
AlarmManagerUtils.setStartAlarm();
AlarmManagerUtils.setEndAlarm();
}
当我在重新启动设备之前第一次设置报警时,我使用了相同的setStartAlarm和setEndAlarm。报警从共享首选项触发的时间,所以我猜不应该有数据丢失,开始和结束报警
public static void setStartAlarm(){
AlarmManager alarmManager = (AlarmManager)
MyApplication.getContext().getSystemService(Context.ALARM_SERVICE);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.set(Calendar.HOUR_OF_DAY
,SharedPrefUtils.getStartHour(MyApplication.getContext()));
time.set(Calendar.MINUTE
,SharedPrefUtils.getStartMin(MyApplication.getContext()));
time.set(Calendar.SECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis()
,pendingIntent(MyApplication.getContext()));
}
private static PendingIntent pendingIntent(Context context){
Intent intent = new Intent(context, ClsBroadCastReciver.class);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(context, 01, intent, PendingIntent.FLAG_ONE_SHOT);
return pendingIntent;
}
public static void setEndAlarm(){
AlarmManager alarmManager = (AlarmManager)
MyApplication.getContext().getSystemService(Context.ALARM_SERVICE);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.set(Calendar.HOUR_OF_DAY
,SharedPrefUtils.getEndHour(MyApplication.getContext()));
time.set(Calendar.MINUTE
,SharedPrefUtils.getEndMin(MyApplication.getContext()));
time.set(Calendar.SECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP,
time.getTimeInMillis(), endPendingIntent(MyApplication.getContext()));
}
private static PendingIntent endPendingIntent(Context context){
Intent intent = new Intent(context, ClsEndBroadcastReciever.class);
PendingIntent pendingIntent = PendingIntent.
getBroadcast(context, 02, intent, PendingIntent.FLAG_ONE_SHOT);
return pendingIntent;
}
挂起意图中的广播分别用于调度作业和取消调度,并且我在清单中具有引导权限
谢谢
# 1 楼答案
尝试向清单添加权限: