2

一定時間後にサービスを実行する方法を探しています。ただし、アプリが常に実行されていることに依存したくないため、この問題に標準のAlarmManagerを使用することはできません。また、AlarmManager は電話がロックされている時間を考慮に入れます。

基本的に、目標は、ユーザーが電話を一定時間 (1 時間など) 使用した後にサービスを実行することです。このタイマーは、電話機がロックされているか電源が切られているときに休憩できるようにする必要があります。

4

1 に答える 1

0

いろいろ調べた結果、これを行う最善の方法は次のとおりであることがわかりました。

  • setRepeatingAlarmManagerのメソッドによって 10 秒ごとに実行されるサービスを作成します。
  • AlarmManager を作成するアプリが停止した場合、アプリが再起動したら、繰り返しアラームも再起動します。
  • サービスが 10 秒ごとに実行されたら、次のコードを使用して電話がロックされているかどうかを確認します。

    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); boolean locked = keyguardManager.inKeyguardRestrictedInputMode();

    電話がロックされていない場合は、時間を追跡するデータベース変数を 10 秒ずつインクリメントするサービスを用意します。

  • また、データベースを更新した後、合計ロック解除時間が最大時間を超えているかどうかをチェックします。もしそうなら、どんなイベントでもアクティブにします。

誰かがより良い(よりクリーンな)方法を思いついたら、その答えを受け入れます。

于 2012-08-04T04:32:36.697 に答える