画面がロックされるタイミングを検出する必要がある Android アプリケーションがあります。
画面が「ロック解除」されたままになる時間を知ることはできますか?
2 に答える
ブロードキャスト レシーバーを登録する必要があります。デバイスがスリープ状態になると、システムはブロードキャストを送信します。次のコードを任意の場所に配置します。
private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(final Context context, final Intent intent) {
//check if the broadcast is our desired one
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
//here define your method to be executed when screen is going to sleep
}};
受信者を登録する必要があります。
IntentFilter regFilter = new IntentFilter();
// get device sleep evernt
regFilter .addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, regFilter );
ACTION_SCREEN_OFFは画面がオフになった後に送信され、 ACTION_SCREEN_ONは画面がオンになった後に送信されます。
アップデート:
1.方法 1: 私の知る限り、デバイスがスリープ状態になる前にリスナーをセットアップすることはできません。PowerManager 内にそのようなリスナーはありません。私の頭に浮かぶ解決策は、設定からデバイスのタイムアウトを取得してから、アプリでカウントダウンタイマーを設定することです。ユーザーが画面に触れるたびに、カウントダウンをリセットする必要があります。このようにして、デバイスがスリープ状態になる時間を推測し、デバイスがスリープ状態になる前にウェイクロックをセットアップして目的のコードを実行し、その後、ウェイクロックを無効にしてデバイスをスリープ状態にすることができます。
2.方法 2: デバイスがスリープ状態になると、アクティビティの inPause() メソッドが呼び出されます。そこでいくつかのコードを実行できるかもしれません。
「Wakelock」を使用する必要があります..このコードを試してください
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "whatever");wl.acquire();
また、メニフェスト「android.permission.WAKE_LOCK」で許可を取得し、 pouse() メソッドに wl.release() を書き込むことを忘れないでください..