5

画面がロックされるタイミングを検出する必要がある Android アプリケーションがあります。
画面が「ロック解除」されたままになる時間を知ることはできますか?

4

2 に答える 2

8

ブロードキャスト レシーバーを登録する必要があります。デバイスがスリープ状態になると、システムはブロードキャストを送信します。次のコードを任意の場所に配置します。

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() メソッドが呼び出されます。そこでいくつかのコードを実行できるかもしれません。

于 2013-07-30T12:39:42.527 に答える
1

「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() を書き込むことを忘れないでください..

于 2013-07-30T13:15:33.720 に答える