22

特定のアクションが発生した後、ディスプレイのオンとオフを切り替えようとしています(今のところ画面をオフにすることを心配しましょう)。ウェイクロックから私が理解していることから、これは私が持っているものです:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);    
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");

stackoverflowやその他の場所に関する他の投稿を読んだとき、PARTIAL_WAKE_LOCKによって画面がオフになると言われているようです。しかし、SDKを読むと、画面をオフにすることしかできないと書かれています。これは正しくないと思います。

4

5 に答える 5

19

画面をオフにする方法は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);
于 2011-07-20T05:00:06.457 に答える
10

以下は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

于 2011-07-20T03:59:23.180 に答える
5

私にとって、これらの方法は機能しませんでした。そこで、他のシナリオ(簡単ではない)を使用して画面をオフにしました。

Androidには、目覚めの原因となる2つのフラグがあります。

  • 表示->画面タイムアウト
  • アプリケーション->開発->充電中は目を覚ましてくださいチェックボックス。

私は次のフローを使用しました:

  1. まず最初に、以前の構成を保存します。たとえば、画面のタイムアウトは1分で、 充電中は目を覚まします。

  2. その後、充電中は目を覚まし続けるのチェックを外し、画面のタイムアウトを最小時間に設定します。

  3. 画面がオフになっているAndroidからイベントを取得するために放送受信機サービスに登録します。

  4. 画面上のイベントをオフにしたとき、以前の構成をデフォルトに設定しました。画面のタイムアウトは1分で、 充電中は目を覚まし続けます。

  5. 受信者の登録を解除する

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
于 2012-10-16T20:50:10.160 に答える
1

このリンクごとに、次のように画面をオフにすることもできます。

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);

1000はミリ秒単位で、1秒を意味します。必要に応じて、任意の値に置き換えることができます。

必要な許可:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
于 2015-08-17T15:25:28.590 に答える
-2

試してください-wakeLock.acquire(1000); //時間を指定すると、暗くなり、最終的にオフになります。

于 2014-03-26T06:49:06.523 に答える