为了账号安全,请及时绑定邮箱和手机立即绑定

重启后第二天警报管理器不起作用

重启后第二天警报管理器不起作用

慕妹3146593 2021-10-20 14:25:39
这就是我创建闹钟的方式    PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);    AlarmManager alarm = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);    Calendar startTime = Calendar.getInstance();    startTime.set(Calendar.HOUR_OF_DAY, hourOfDay);    startTime.set(Calendar.MINUTE, minute);    startTime.set(Calendar.SECOND, 0);    if (startTime.getTimeInMillis() < System.currentTimeMillis()) {        startTime.add(Calendar.DAY_OF_MONTH, 1);    }    long intendedTime = startTime.getTimeInMillis();    alarm.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent);我在 BroadcastReceiver 中调用的方法:private void startAlarm(Context context) {    Intent mainIntent = new Intent(context, MainActivity.class);    PendingIntent contentIntent = PendingIntent.getActivity(context, 1, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);    NotificationManager myNotificationManager =            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);    Notification.Builder builder = new Notification.Builder(context);    builder.setSmallIcon(R.drawable.l_active)            .setContentTitle(context.getString(R.string.morn_title))            .setContentText(context.getString(R.string.morn_text))            .setWhen(System.currentTimeMillis())            .setContentIntent(contentIntent);    myNotificationManager.notify(1, builder.build());}所以我遇到了像这里这样的问题。当我将闹钟设置为 9:51 而我的时间是 10:00 时 - 闹钟不起作用。添加后if (startTime.getTimeInMillis() < System.currentTimeMillis()) {        startTime.add(Calendar.DAY_OF_MONTH, 1);}警报工作正常,但是当我重新启动手机时 - 它不起作用。我会试着用一个例子来解释:我手机上的时间是23:50。我在 00:05 设置闹钟,然后我重新启动手机并等到 00:05。而且闹钟不响。但!如果我不重启手机 - 一切正常。还有一件事:当我没有设置过去的时间时,我的手机重启没有问题(例如,我的时间是 22:00,我将时间设置为 22:05,重启手机就可以了)
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

即使在重新启动后,AlarmManager 也不会持续存在。您可以通过创建一个 BroadCastReceiver 来使 AlarmManager 在重新启动后工作,该 BroadCastReceiver 将在设备启动完成时启动警报。


使用<action android:name="android.intent.action.BOOT_COMPLETED" />在广播接收器类诱捕启动活动。


您需要在 AndroidManifest.xml 中添加上一行,如下所示,


<receiver android:name=".StartUpReceiver" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

  <intent-filter>

    <action android:name="android.intent.action.BOOT_COMPLETED" />

  </intent-filter>

</receiver>

类 StartUpReceiver


public class StartUpReceiver extends BroadcastReceiver {

  @Override

  public void onReceive(Context context, Intent intent) {


      if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {

         ////// reset your alrarms here 

      }


  }

}  

在StartUpReceiver你可以AlarmManager再次创建警报。我建议使用需要store alarm info在database或SharedPreferences所以会产生信息创建报警时,装置完成重启。


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信