android - 如果设备关闭,Alarmmanager 不会触发第一个警报

标签 android

我正在使用闹钟管理器设置每天凌晨 2 点广播。警报管理器在正常情况下工作正常,但在以下情况下失败。

  1. 我在凌晨 1 点安排闹钟管理器,将时间更改为凌晨 1.58 分,然后关闭设备并在 5 分钟后(即凌晨 2.03 分)打开手机。在这种情况下,我的警报不会在同一天和每隔几天触发一次。

谁能帮我解决这个问题

//Alarm manager
//timeToTwoAm is calculate time to 2AM from current time
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,timeToTwoAm,
            AlarmManager.INTERVAL_DAY, alarmIntent);

最佳答案

您的警报将不会保留。重新启动后,所有注册的警报都将被删除。

2 个解决方案会有所帮助:

<强>1。注册一个 BOOT_COMPLETED 广播接收器:

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".notification.alarm.OnBootReceiver">
     <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
     </intent-filter>
</receiver> 

然后在您的 OnBootReceiver 中再次在 AlarmManager 中注册您的警报。

<强>2。使用 JobScheduler-API(>= API 21)或 GcmNetworkManager (PlayServices)

根据您的用例,还可以使用新的 GcmNetworkMaanger,它允许在重启期间保留作业。

将服务添加到您的 list :

  <service
     android:name=".LoadWeatherService"
     android:exported="true" android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
     <intent-filter>
        <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
     </intent-filter>
  </service>

在您的服务中声明要做的事情:

public class LoadWeatherService extends GcmTaskService {

   public void onInitializeTasks() { 
     super.onInitializeTasks();
     // Reregister your Job after update of Google Play Services
   }

   @Override
   public int onRunTask(TaskParams taskParams) {
     // Do your stuff
     return GcmNetworkManager.RESULT_SUCCESS;
   }
}

订阅你的工作

     String tag = "myperiodicTask";
     PeriodicTask periodicTask = new PeriodicTask.Builder().setService(LoadWeatherService.class)
           .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED).setPeriod(60L).setFlex(10L)
           .setTag(tag).setPersisted(true).build();
     GcmNetworkManager.getInstance(this).schedule(periodicTask);

请注意:这只是我的应用程序中的示例,您必须根据自己的需要进行调整。

关于 GcmNetworkManager 的进一步阅读:https://developers.google.com/cloud-messaging/network-manager

关于android - 如果设备关闭,Alarmmanager 不会触发第一个警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30884448/

相关文章:

android - 以 sdk 版本 33 (Android 13) 为目标是否安全?

android - 启动画面奇怪的黑色矩形在屏幕上

android - 使用 Robolectric 模拟 HttpResponse

android - 更改微调器下拉宽度

android - 在android studio中我的手机在设备选择器中没有显示

java - 使用 Samsung Galaxy S3 为 Android 设置 SEEK

android - 按键对数组进行排序适用于 iOS,但不适用于 Android

Android EditText 在长文本上被拉伸(stretch)

Android 应用程序在向下滚动时崩溃

android - 在 Android 上使用 opengl es 2.0 进行简单翻译