2012-04-18 13 views
5

AlarmManagrを繰り返し時間で設定しました。AlarmManagerがスリープモードで動作しない

public void setAlarmManager(Context context, Intent intent) {   
    PendingIntent pendingIntent; 
    pendingIntent = PendingIntent.getService(context, 0, intent, 0);    
    AlarmManager alarmManager = 
     (AlarmManager)context.getSystemService(context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
           calendar.getTimeInMillis(), 
           40000, pendingIntent);     
} 

これは私のデバイスは、私は手動で自分のデバイスを目覚めまで、アラームは動作を停止しスリープモードに移行する場合を除いて正常に動作します:ここで私はそれを設定していたことで、私の方法があります。デバイスをスリープ状態にした後、AlarmManagerは再び動作を開始します。

スリープモードでもマネージャを実行し続けるにはどうすればいいですか?

+0

AlarmManager.set(AlarmManager.RTC_WAKEUP、...)は私にとってうまく動作し、AlarmManager.setRepeating()を試していません。多分これは関連しているでしょうか?分かりませんが、ちょうど私が – SteelBytes

+0

setRepeatingと言いたいと思ったのは、一定の時間が経過した後にタスクを繰り返すことだけです。残りのものは同じです – Reyjohn

+0

誰も私に解決策を与えることができますか? – Reyjohn

答えて

6

PendingIntentがサービスを呼び出すので、BroadcastReceiverには電話がないためです。サービスが作成される前にデバイスがスリープ状態に戻る可能性があるためです。ブロードキャストレシーバーに移動した場合、onReceiveがBroadcastReceiverを完了するまで起きている必要があります。つまり、ウェイクロックを取得してサービスを開始する時間があります。 BroadcastReceiverに移動しても、処理が完了するまでは、10秒以上かかることがあります(BroadcastReceiverの制限)。

これはAlarmManagerのアンドロイド文書のパラグラフ2から取得されます:

」...あなたの警報受信機がContext.startService()と呼ばれる場合、要求されたサービスが起動される前に、電話がスリープ状態になることがあり、これを防ぐために。あなたのBroadcastReceiverとサービスは、サービスが利用可能になるまで電話機が動作し続けることを保証するために、別個のウェイクロックポリシーを実装する必要があります。

関連する問題