2D バーコードをスキャンし、各バーコードをより長いタスクが実行される IntentService に送信する小さなユーティリティ アプリを開発しています。
アクティビティが表示されると、バーコードがサービスで処理されるまで、デバイスがスリープ状態にならないようにする必要があります。サービスが処理を終了するとサービスは停止しますが、アクティビティは引き続き表示されます。
アクティビティのライフサイクル中に SCREEN_DIM_WAKE_LOCK WakeLock を保持したいのですが、このタイプは CPU のスリープを妨げないため、新しい 2D コードがスキャンされたときにアクティビティで PARTIAL_WAKE_LOCK を取得して解放する必要もあります。処理後のインテント サービスで。
SCREEN_DIM_WAKE_LOCK の目的は、ユーザーが数秒ごとに電源ボタンを押してデバイスを起動し、新しいバーコードを読み取れるようにするという不便さを回避することです。ユーザーは大量のコードを次々に読み取る必要があり、ユーザーの操作がない短い間隔であっても、アクティビティは継続する必要があります。
Android では、アプリが制御できないいくつかの条件のために、アプリが一番上にある、閉じられていない、またはフォアグラウンドにあるという 100% の保証がないことを知っていますが、できる限り行きたいと思います。
複数の WakeLock を保持することは可能ですか? アクティビティとサービスの両方からアクセスできることをどこで宣言できますか? (シングルトン、拡張アプリケーション?)