2015-06-17 134 views
1

我每天凌晨2點使用報警管理器設置廣播。警報管理器在正常情況下正常工作,但在以下情況下失敗。如果設備關閉,報警管理器不會發出第一次報警

  1. 我在凌晨1點調度報警管理器,將時間更改爲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); 
+0

製作啓動完成reciever和電話的啓動 –

回答

2

您的警報將不會被保留。重新啓動後,所有註冊的警報都將被刪除。

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

+0

感謝您的回覆再次設定報警。我需要離線,所以我相信GcmNetworkManager不適合我的情況。 – Suresh

+0

我想,如果你沒有設置setRequiredNetwork參數,它也可以在沒有聯網的情況下工作。你的第二個問題對我來說還不清楚。但是你必須處理,如果警報應該在你的OnBootReceiver中註冊/解僱。 – Christopher