AlarmManager.setExact() 不起作用
AlarmManager.setExact() does not work
我写了一个应用程序,可以根据特定时间设置闹钟。这些具体时间每天都在变化。例如,日出时间每天都在变化。所以,我定义了一个 main activity 负责每晚在 11:55 p.m 调用 setExact() 方法,然后它必须根据明天的具体时间设置明天的闹钟。问题是,它不起作用!当我设置闹钟时,它只工作一次,不会设置第二次。我真的需要帮助。谢谢 :)
public class MainPage extends AppCompatActivity {
private Calendar calendar = new GregorianCalendar();
protected GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setMainAlarm();
}
private void setMainAlarm() {
AlarmManager alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(".mainAlarmReciever");
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar alertCalendar = Calendar.getInstance();
alertCalendar.set(Calendar.HOUR,23);
alertCalendar.set(Calendar.MINUTE,54);
alertCalendar.set(Calendar.SECOND,59);
if (Build.VERSION.SDK_INT >= 23) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
}else{
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
}
}
这是相关的接收器 class:
public class mainAlarmReciever extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmSetter.createOrUpdateAllAlarms(context);
this.completeWakefulIntent(intent);
}
问题是您没有在 mainAlarmReciever
上设置明天的 mainAlarm。
想象一下,您今晚 mainAlarmReciever->onRecieve
运行 11:54:59 P.M。它可以执行您想执行的任何任务。您还应该在 onRecieve 函数中将明天的 mainAlarm 设置为 11:54:59 P.M。
另一种选择是使用 setRepeating(如 CommonsWare 所述,它在 API 19+ 之后并不准确)。
我写了一个应用程序,可以根据特定时间设置闹钟。这些具体时间每天都在变化。例如,日出时间每天都在变化。所以,我定义了一个 main activity 负责每晚在 11:55 p.m 调用 setExact() 方法,然后它必须根据明天的具体时间设置明天的闹钟。问题是,它不起作用!当我设置闹钟时,它只工作一次,不会设置第二次。我真的需要帮助。谢谢 :)
public class MainPage extends AppCompatActivity {
private Calendar calendar = new GregorianCalendar();
protected GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setMainAlarm();
}
private void setMainAlarm() {
AlarmManager alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(".mainAlarmReciever");
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar alertCalendar = Calendar.getInstance();
alertCalendar.set(Calendar.HOUR,23);
alertCalendar.set(Calendar.MINUTE,54);
alertCalendar.set(Calendar.SECOND,59);
if (Build.VERSION.SDK_INT >= 23) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
}else{
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
}
}
这是相关的接收器 class:
public class mainAlarmReciever extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmSetter.createOrUpdateAllAlarms(context);
this.completeWakefulIntent(intent);
}
问题是您没有在 mainAlarmReciever
上设置明天的 mainAlarm。
想象一下,您今晚 mainAlarmReciever->onRecieve
运行 11:54:59 P.M。它可以执行您想执行的任何任务。您还应该在 onRecieve 函数中将明天的 mainAlarm 设置为 11:54:59 P.M。
另一种选择是使用 setRepeating(如 CommonsWare 所述,它在 API 19+ 之后并不准确)。