0

ボタンをクリックすると画面がオフになり、2 秒後に再びオンになるアクティビティを書きたいと思います。画面の電源を切るために、次のコードを使用してみました。

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0/(float)255;
getWindow().setAttributes(lp);

ただし、onClick関数が戻ったときにのみ有効になります。ハンドラーに実行しようとしましたが、成功しませんでした。同じ onClick 呼び出しで 2 秒後に電源オン関数を呼び出せるように、関数が戻る前に設定を強制的に適用する方法を見つける必要があります。

また、後でデバイスをウェイクアップするのが非常に難しいこともわかりました。このコードは、物理ボタンを使用して画面の電源をオフにすると機能しますが、前述の手法を使用して電話の電源をオフにすると機能しないようです。

PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.ON_AFTER_RELEASE ,"Dev Tag");
try
{
    wl.acquire();
    wl.release();
}
catch (Exception e)
{
    Toast.makeText(this, e.getMessage(),20).show();
}

よろしくお願いします。

4

1 に答える 1

0

画面の電源を切るために、次のコードを使用してみました

それは画面の電源をオフにしません。これにより、バックライトが 0 の明るさに設定されます。プログラムで画面の電源を切ることはできません。最後に確認しました。

ただし、onClick関数が戻ったときにのみ有効になります。

正しい。それがAndroidの仕組みです。UI はシングルスレッドです。画面の明るさを変更するリクエストはキューに入れられ、から戻って Android に制御を戻すまで、そのメッセージは処理されませんonClick()

同じ onClick 呼び出しで 2 秒後に電源オン関数を呼び出せるように、関数が戻る前に設定を強制的に適用する方法を見つける必要があります。

これは不可能です。また、必要ありません。2 秒経過後に制御を取得する方法はたくさんあります。おそらく最も効率的なのはpostDelayed()、ウィジェットの 1 つを呼び出すことです。

また、後でデバイスをウェイクアップするのが非常に難しいこともわかりました

そもそもデバイスがスリープ状態ではありませんでした。

このコードは、物理ボタンを使用して画面の電源をオフにすると機能しますが、前述の手法を使用して電話の電源をオフにすると機能しないようです。

AWakeLockは、バックグラウンド サービスで使用するもので、作業を完了する間、デバイスをしばらくの間起動させたままにします。また、思考を処理するために内部的に使用されるものでもありますandroid:keepScreenOn(電子ブック リーダー、ビデオ プレーヤー、およびユーザーがしばらく画面をタップしない可能性があるその他のアクティビティに使用されます)。とは関係ありませんscreenBrightness

于 2011-11-23T01:45:32.720 に答える