6

繰り返し時間でAlarmManagrを設定しました。これが私がそれを設定している私の方法です:

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は再び動作を開始します。

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

4

1 に答える 1

8

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

これは、AlarmManagerのAndroidドキュメントの段落2から抜粋したものです。

"...アラーム受信機が呼び出された場合Context.startService()、要求されたサービスが開始される前に電話がスリープする可能性があります。これを防ぐために、BroadcastReceiverとサービスは別のウェイクロックポリシーを実装して、電話がサービスが利用可能になります。」

于 2012-05-10T20:52:10.957 に答える