Android AlarmManager在重新启动后不工作

Android AlarmManager在重新启动后不工作,android,alarmmanager,reboot,Android,Alarmmanager,Reboot,我做了我应该做的每一步,但它仍然不起作用。 情况: 我有一个开机接收器,它可以工作。 重新启动后,我可以看到测试土司。 重新启动后,我还会在Toast中显示:Test:+I。(i=待决意向) 我看到它会执行每个scheduleAlarm(),但当我到达应该计划的时间时,警报不会启动 public class SampleBootReceiver extends BroadcastReceiver { public static final String MY_PREFS_NAME = "alar

我做了我应该做的每一步,但它仍然不起作用。 情况: 我有一个开机接收器,它可以工作。 重新启动后,我可以看到测试土司。 重新启动后,我还会在Toast中显示:Test:+I。(i=待决意向) 我看到它会执行每个scheduleAlarm(),但当我到达应该计划的时间时,警报不会启动

public class SampleBootReceiver extends BroadcastReceiver {
public static final String MY_PREFS_NAME = "alarmPrefs";
SharedPreferences.Editor editor;

private PendingIntent pi;
long INTERVAL_WEEK = 604800000L;
private AlarmManager am;
Context mContext;
int servTimeH;
int servTimeM;
int yourTimeH;
int yourTimeM;
int difTimeH;
int difTimeM;
String timeH;
String timeM;
String dateandtime;
long delay = 120000L;
int day;
int i = 0;

public void onReceive(Context context, Intent intent)
{
    mContext = context;
    editor = context.getSharedPreferences(MY_PREFS_NAME, 0).edit();
    //start shared pref get here in if method.
    SharedPreferences sharedPref = context.getSharedPreferences(".Alarms", Context.MODE_PRIVATE);
    System.out.println("BOOL: " + sharedPref.getBoolean("Monday", false));
    Toast.makeText(mContext, "TESTTT", Toast.LENGTH_LONG).show();

    //boolean days
    monday = sharedPref.getBoolean("Monday", false);


    if(monday){
        day = 1;
        if(pl13) {
            i++;
            pi = PendingIntent.getActivity(mContext.getApplicationContext(), i, intent, PendingIntent.FLAG_CANCEL_CURRENT);
            scheduleAlarm(day, 13, 00);
            showText("i: " + i);
        }
    }
}

public void scheduleAlarm(int dayOfWeek, int timeH, int timeM){


    ComponentName receiver = new ComponentName(mContext, SampleBootReceiver.class);
    PackageManager pm = mContext.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

    System.out.println("Repeat alarm");

    Calendar calNow = Calendar.getInstance();
    Calendar calSet = (Calendar) calNow.clone();
    calSet.set(Calendar.DAY_OF_WEEK, dayOfWeek);

    calSet.set(Calendar.HOUR_OF_DAY, (timeH + difTimeH));
    calSet.set(Calendar.MINUTE, (timeM));
    System.out.println("Cal set to:" + (timeH + difTimeH) + ":" + timeM);

    calSet.set(Calendar.SECOND, 0);

    if(calSet.compareTo(calNow) <= 0){
        //Today Set timeH passed, count to tomorrow
        calSet.add(Calendar.DAY_OF_YEAR, 7);
    }


    am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, (calSet.getTimeInMillis()-delay), INTERVAL_WEEK, pi);




}

public void showText(String s){
    Toast.makeText(mContext, s, Toast.LENGTH_LONG).show();
}
}
公共类SampleBootReceiver扩展了BroadcastReceiver{
公共静态最终字符串MY\u PREFS\u NAME=“alarmPrefs”;
SharedReferences.Editor;
私人吊挂;
长间隔周=60480万升;
私人警报管理器am;
语境;
int servTimeH;
int servTimeM;
int yourTimeH;
int yourTimeM;
int difTimeH;
int difTimeM;
字符串时间h;
字符串timeM;
字符串dateandtime;
长延时=120000L;
国际日;
int i=0;
公共void onReceive(上下文、意图)
{
mContext=上下文;
editor=context.getSharedReferences(我的首选项名称,0).edit();
//在if方法中启动共享pref get here。
SharedReferences SharedReferences=context.getSharedReferences(“.Alarms”,context.MODE\u PRIVATE);
System.out.println(“BOOL:+sharedPref.getBoolean”(“星期一”,false));
Toast.makeText(mContext,“TESTTT”,Toast.LENGTH_LONG.show();
//布尔日
星期一=sharedPref.getBoolean(“星期一”,false);
若有(星期一){
日=1;
若有(pl13){
i++;
pi=pendingent.getActivity(mContext.getApplicationContext(),i,intent,pendingent.FLAG_CANCEL_CURRENT);
定时报警(第13天,00);
showText(“i:+i”);
}
}
}
公共无效计划报警(int dayOfWeek、int timeH、int timeM){
ComponentName receiver=新的ComponentName(mContext,SampleBootReceiver.class);
PackageManager pm=mContext.getPackageManager();
pm.setComponentEnabledSetting(接收器、,
PackageManager.COMPONENT\u ENABLED\u STATE\u ENABLED,
PackageManager.Don_KILL_APP);
系统输出打印项次(“重复报警”);
Calendar calNow=Calendar.getInstance();
Calendar calSet=(Calendar)calNow.clone();
calSet.set(日历.周中日,周中日);
calSet.set(日历小时/天,(timeH+difTimeH));
calSet.set(Calendar.MINUTE,(timeM));
System.out.println(“校准设置为:”+(timeH+difTimeH)+“:”+timeM);
calSet.set(日历秒,0);

if(calSet.compareTo(calNow)if(pl13){…}@SHekharKG pl13中的pl13是一个布尔值,这是真的。正如我在问题中所说的:一切都正常。我会显示toast i:+i。但它不会安排警报。你是否初始化了difTimeH、difTimeM、timeH、timeM?然后打印传递给setRepeating()的毫秒日志。我想这可能是个问题。确定时间正确吗?
calSet.add(Calendar.DAY\u OF _YEAR,7);
?警报将在7天后开始…接收启动完成的广播并再次设置警报。