有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    尝试向清单添加权限:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />