繁体   English   中英

设备关闭时,Alarmmanager不会触发第一个警报

[英]Alarmmanager not firing first alarm if device is off

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

  1. 我正在安排警报管理器@ 1am,将时间更改为1.58am,然后在5分钟(即2.03am)之后关闭设备并打开电话。 在这种情况下,我的警报不会在同一天和隔日触发。

有人可以帮我解决这种情况吗

//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,它允许在重新引导期间持久保存作业。

将服务添加到您的清单:

  <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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM