1

私はかなり奇妙な問題を抱えています。最近、次のコードを使用してアプリケーションでウェイクロックを使用しようとしました:

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
    screenLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen");
    button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            System.out.println("Clicked");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (!locked)
                setKeepScreenOn(WakeupLightActivity.this, true);
            else setKeepScreenOn(WakeupLightActivity.this, false);
            System.out.println("Screen will stay on");
        }
    });
}

public void setKeepScreenOn(Activity activity, boolean keepScreenOn) {
    if(keepScreenOn) {                    
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);          
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        this.screenLock.acquire();
    } 
    else {                                 
       activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);             
       activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        this.screenLock.release();
    }
}

ウェイクロックは完璧に機能します。ボタンを押してから 5 秒後に (そして私の電話をロックしてから)、画面がオンになります。ただし、このテストは、USB ケーブルを使用してデバッグのために携帯電話をラップトップに接続している間に行われました。

奇妙な部分が来ます。電話を USB ケーブルに接続していない場合、ウェイクロックは単に画面をオンにしません。私が使用しているデバイスは、HTC の欲望です。私は実際に同じことをした別のHTCの欲求でそれをテストしました. 次に、HTC Desire HD で試してみました。そして、何を推測しますか:それは再び完全に機能しました!私はこれについて本当に混乱しており、問題が単に私の電話タイプの欠陥なのか、それともコードで何か間違ったことをしているのか疑問に思っています. 私にできることはありますか?私のアプリを購入した後に、誤動作している電話タイプの潜在的な顧客が同じ問題に遭遇した場合、非常に厄介です.

壁のプラグにケーブルを接続して電話を充電しながら、アプリケーションも試したことに注意してください。これは、電話がまったく接続されていないのと同じ問題につながります。どちらの HTC Desires も同じ Android バージョン (2.2.2) を実行します。

4

1 に答える 1

2

どうやらこれはすべて、間違ったフラグを使用していたために発生したようです。この問題は、次のフラグを使用して WakeLock を作成することで解決されました。

PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP
于 2012-06-09T13:27:29.573 に答える