отрывать экран, пока не стало слишком поздно - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть действие, которое при включении onPause должно выполнять некоторую работу, но не при выключенном экране. Я уже зарегистрировал получателя для намерения ACTION_SCREEN_OFF, и теоретически этот и статический флаг на уровне приложения должны помочь, но ... Это не работает, потому что обратный вызов onPause для действия вызывается ДО получатель может получить свое намерение. То есть: logcat * ting *, нажимая кнопку холостого хода, я могу сначала увидеть трассировку onPause, а затем onReceive. На этом этапе настройка статического флага не очень важна ...

Есть ли какие-нибудь возможности узнать во время активности onPause, что экран выключен?

Заранее спасибо
Л.

1 Ответ

9 голосов
/ 09 сентября 2012

У меня была та же проблема, и приемник не подходит

Android-разработчик

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

"Примечание. Если вы регистрируете получателя в своей деятельностиРеализация .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;    
}
...