特定のアクションが発生した後、ディスプレイのオンとオフを切り替えようとしています(今のところ、画面をオフにすることについて心配しましょう)。ウェイクロックから理解したことから、これは私が持っているものです:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
Stackoverflowやその他の場所で他の投稿を読んだとき、PARTIAL_WAKE_LOCKが画面をオフにすることを教えてくれたようです。しかし、SDKを読むと、画面をオフにすることしかできないと書いてあります。ですから、これは正しくないと思います。
ヒントがあれば役に立ちます!おかげで、
マイク
画面をオフにする方法は2つあります。
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
// Choice 1
manager.goToSleep(int amountOfTime);
// Choice 2
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();
おそらくこの権限も必要です。
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
更新:
この方法を試してください。 Androidライトレベルが十分に低くなると、画面がオフになります。
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
以下は SDKドキュメント からコピーされます。画面をオンのままにしたい場合は、SCREEN_BRIGHT_WAKE_LOCK
で十分です。
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
私にとって、これらの方法は機能しませんでした。そのため、画面をオフにするために他のシナリオ(簡単ではない)を使用しました。
Androidには2つのフラグがあり、目を覚まします。
私はフォローされたフローを使用しました:
すべての1つ目は、以前の設定を保存します。たとえば、画面のタイムアウトは1分で、充電中にスリープ状態を解除しないでくださいがチェックされています。
その後、チェックを外し、充電中にスリープ状態を解除して、画面のタイムアウトを最小時間に設定します。
Android画面がオフになっているAndroid $ ===からイベントを取得するためにブロードキャストレシーバーサービスに登録します。
画面オフでイベントが発生したときに、以前の構成をデフォルトに設定しました。画面のタイムアウトは1分で、充電中にスリープ状態を解除をオンにしました。
レシーバーの登録を解除
15秒後デバイスがスリープする
ここにコードの断片があります:
BroadcastReceiver
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
/**
* Catch Screen On/Off
* */
public class BroadcastReceiverScreenListener extends BroadcastReceiver{
private BroadCastListenerCallBackItf mBroadCastListenerCallBack = null;
public BroadcastReceiverScreenListener(
BroadCastListenerCallBackItf broadCastListenerCallBack) {
this.mBroadCastListenerCallBack = broadCastListenerCallBack;
}
@Override
public void onReceive(Context arg0, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
mBroadCastListenerCallBack.broadCastListenerCallBack__ScreenOff_onResponse();
}
}
}
コールバックとして使用されるインターフェース
public interface BroadCastListenerCallBackItf {
public void broadCastListenerCallBack__ScreenOff_onResponse();
}
メインクラスの2つのメソッド:
....
AndroidSynchronize mSync = new AndroidSynchronize();
....
public void turnScreenOff(int wait){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadCastListenerCallBackItf broadCastListenerCallBack = this;
BroadcastReceiver mReceiver = new BroadcastReceiverScreenListener(broadCastListenerCallBack);
m_context.registerReceiver(mReceiver, filter);
//set Development --> disable STAY_ON_WHILE_PLUGGED_IN
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
0 );
// take current screen off time
int defTimeOut = Settings.System.getInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 3000);
// set 15 sec
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 15000);
// wait 200 sec till get response from BroadcastReceiver on Screen Off
mSync.doWait(wait*1000);
// set previous settings
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, defTimeOut);
// switch back previous state
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
BatteryManager.BATTERY_PLUGGED_USB);
m_context.unregisterReceiver(mReceiver);
}
public void broadCastListenerCallBack__ScreenOff_onResponse() {
mSync.doNotify();
}
....
AndroidSynchronizeクラス
public class AndroidSynchronize {
public void doWait(long l){
synchronized(this){
try {
this.wait(l);
} catch(InterruptedException e) {
}
}
}
public void doNotify() {
synchronized(this) {
this.notify();
}
}
public void doWait() {
synchronized(this){
try {
this.wait();
} catch(InterruptedException e) {
}
}
}
}
[編集]
許可を登録する必要があります:
Android.permission.WRITE_SETTINGS
この link に従って、次のように画面をオフにすることもできます。
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);
1000はミリ秒単位であり、1秒を意味します。必要に応じて任意の値に置き換えることができます。
必要な許可:
<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />