1

ウェイクロックに問題があります。基本的に、タイマースレッドでwakelockを実行しました。これは、アプリの全期間中、AsyncTaskのdoInBackgroundです(これは、パフォーマンス測定を行うためのバックグラウンドアプリです)。それから、画面を10分ごとに1秒程度だけウェイクアップさせたいと思いました。そこで、AsyncTaskを拡張する別のクラスを作成し、以下のコードをそのdoInBackgroundに配置しましたが、画面がオンに戻りません。このスレッドと、onCreateのdoInBackgroundメソッドを使用してAsyncTaskである他の2つのスレッドを開始することに注意してください。

これがウェイクアップを行う私の新しい内部クラスです。基本的には、他の2つのバックグラウンドスレッドがブール値をtrueに設定するまで、電話画面を10分ごとに少しの間ウェイクアップするだけです。

private class WakeUp extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... arg0) {

        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());

        do{
            try {
                Thread.sleep(WAKEUP_EVERY); //600000ms
            } catch (InterruptedException e) {
                e.printStackTrace();
            }           

            wl.acquire();

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            wl.release();

        }while(!timeCompleted || !transferCompleted);

        return null;
    }

}
4

1 に答える 1

2

ACQUIRE_CAUSES_WAKEUP フラグを使用して、画面をオンにするようウェイクロックに指示するのを忘れました。ドキュメントに従って:

通常の wake lock では、実際にはイルミネーションが点灯しません。代わりに、イルミネーションがオンになると (たとえば、ユーザーのアクティビティによって) イルミネーションがオンのままになります。このフラグは、WakeLock が取得されるとすぐに画面やキーボードを強制的にオンにします。典型的な用途は、ユーザーがすぐに確認できる重要な通知です。

詳細については、 ACQUIRE_CAUSES_WAKEUPを参照してください:D

于 2011-06-27T20:16:56.733 に答える