4

onPause で何らかの作業を行う必要がありますが、画面がオフになっているときはそうではありません。私はすでにインテントのレシーバーを登録しており、理論的には、これとアプリケーションレベルの静的フラグでうまくいくはずですが...レシーバーがインテントを取得する前にアクティビティACTION_SCREEN_OFFのコールバックが呼び出されるため、機能しません。onPause. つまり、logcat*ting* アイドル ボタンを押している間、onPause最初とその後のトレースを確認できますonReceive。この時点で、静的フラグを設定することはあまり重要ではありません...

onPause画面がオフになったことを活動時に知る可能性はありますか?

よろしくお願いします
L.

4

1 に答える 1

9

私は同じ問題を抱えていて、受信機は行くべき道ではありません

アンドロイド開発者

http://developer.android.com/reference/android/content/BroadcastReceiver.html

"注: Activity.onResume() 実装でレシーバーを登録する場合は、Activity.onPause() で登録を解除する必要があります。(一時停止するとインテントを受信しないため、不要なシステム オーバーヘッドが削減されます)。しないでください。 Activity.onSaveInstanceState() で登録解除します。これは、ユーザーが履歴スタックに戻った場合に呼び出されないためです。"

代わりに、onPause メソッドでパワー マネージャーを作成します [このリンクから入手しました]。

Android デバイスで画面の状態を確認する方法は?

public void onPause(){

   PowerManager powermanager =(PowerManager)global.getSystemService(Context.POWER_SERVICE); 
   if (powermanager.isScreenOn()){
        screen_off_beforePause = false;
            //your code here
   }else{
    screen_off_beforePause = true;
   }
}

public void onResume() {
   if (screen_off_beforePause){
    Log.e(TAG + ".onResume()", "screen was off before onPause");
   }else{
    Log.d(TAG + ".onResume()", "screen was not off before onPause");
    //your code here
   }

 //resetting
 screen_off_beforePause = false;    
}
于 2012-09-09T10:20:23.383 に答える