У меня есть одно приложение таймера активности, в котором я переопределил метод onPause(), чтобы приостановить таймер, когда пользователь нажимает кнопку «Домой» или «Назад». Однако я хотел бы, чтобы таймер продолжал двигаться в случае, если пользователь вручную выключает свой экран, но я знаю, что это также вызовет метод onPause(). Есть ли способ обойти это?
Android: выборочное использование onPause()
Ответы (2)
Вы можете переопределить onBackPressed
, чтобы добавить дополнительную логику при нажатии кнопки «Назад». Однако лучшим подходом может быть размещение вашего кода в onStop()
, который вызывается только тогда, когда другое действие перемещается на передний план.
Дополнительную информацию см. в документах Android.
person
Moshe
schedule
02.01.2013
Я не понимаю, как это отвечает на мой вопрос - моя проблема не в кнопке «Назад», а в выключении экрана.
- person John Roberts; 02.01.2013
Прошу прощения, я должен был быть более ясным. Вместо того, чтобы переопределять
onPause
и приостанавливать там свой таймер, переместите логику приостановки таймера в onStop
.
- person Moshe; 02.01.2013
И onStop, и onPause вызываются, когда экран выключен.
- person John Roberts; 02.01.2013
Штопать. Моя ошибка тогда. К сожалению :(
- person Moshe; 02.01.2013
Не волнуйтесь. Спасибо за попытку.
- person John Roberts; 02.01.2013
В итоге я сделал это, обнаружив и проигнорировав событие выключения экрана внутри метода onPause(). Инструкции о том, как это сделать, можно найти здесь: http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/
В частности, я использовал этот код из комментариев (любезно предоставленный Кайлом):
@Override
protected void onCreate() {
// initialize receiver
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
//NEW
PowerManager pm =(PowerManager) getSystemService(Context.POWER_SERVICE);
// your code
}
@Override
protected void onPause() {
// when the screen is about to turn off
// Use the PowerManager to see if the screen is turning off
if (pm.isScreenOn() == false) {
// this is the case when onPause() is called by the system due to the screen turning off
System.out.println(“SCREEN TURNED OFF”);
} else {
// this is when onPause() is called when the screen has not turned off
}
super.onPause();
}
person
John Roberts
schedule
02.01.2013