一定時間後にサービスを実行する方法を探しています。ただし、アプリが常に実行されていることに依存したくないため、この問題に標準のAlarmManagerを使用することはできません。また、AlarmManager は電話がロックされている時間を考慮に入れます。
基本的に、目標は、ユーザーが電話を一定時間 (1 時間など) 使用した後にサービスを実行することです。このタイマーは、電話機がロックされているか電源が切られているときに休憩できるようにする必要があります。
一定時間後にサービスを実行する方法を探しています。ただし、アプリが常に実行されていることに依存したくないため、この問題に標準のAlarmManagerを使用することはできません。また、AlarmManager は電話がロックされている時間を考慮に入れます。
基本的に、目標は、ユーザーが電話を一定時間 (1 時間など) 使用した後にサービスを実行することです。このタイマーは、電話機がロックされているか電源が切られているときに休憩できるようにする必要があります。
いろいろ調べた結果、これを行う最善の方法は次のとおりであることがわかりました。
setRepeating
AlarmManagerのメソッドによって 10 秒ごとに実行されるサービスを作成します。サービスが 10 秒ごとに実行されたら、次のコードを使用して電話がロックされているかどうかを確認します。
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean locked = keyguardManager.inKeyguardRestrictedInputMode();
電話がロックされていない場合は、時間を追跡するデータベース変数を 10 秒ずつインクリメントするサービスを用意します。
また、データベースを更新した後、合計ロック解除時間が最大時間を超えているかどうかをチェックします。もしそうなら、どんなイベントでもアクティブにします。
誰かがより良い(よりクリーンな)方法を思いついたら、その答えを受け入れます。