Отключение экрана при нажатии кнопки громкости

Я написал программу для Android, включающую счетчик, который увеличивается на единицу при нажатии кнопки громкости. Он также должен выключать экран при нажатии этой кнопки и ждать 5 секунд бездействия, прежде чем снова включить его. Но кроме увеличения счетчика при запуске приложения ничего не происходит, т.е. экран не выключается.

Вот мой класс Java:

public class MainActivity extends Activity {

private TextView counterTextView;
int count;

PowerManager.WakeLock wakeLock;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    counterTextView = (TextView) findViewById(R.id.counterTextView);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) {
        count++;
        counterTextView.setText(" " + count + " ");

        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyWakelockTag");
        wakeLock.acquire();

        new Handler().postDelayed(screenOnRunnable(), 5000);

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

private Runnable screenOnRunnable() {
    return new Runnable() {

        @Override
        public void run() {

            wakeLock.release();

        }
    };
}

}

Я также добавил разрешение WAKE_LOCK в манифест:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Я понятия не имею, что случилось... любая помощь будет принята с благодарностью.


person OHS    schedule 04.04.2015    source источник
comment
Вы не передаете контекст и не используете при создании доступа к POWER_SERVICE.   -  person Ali786    schedule 04.04.2015


Ответы (1)


Есть несколько проблем с вашим кодом.

<сильный>1. Вы используете неправильный wakelock

PowerManager.PARTIAL_WAKE_LOCK — гарантирует, что ЦП работает; подсветка экрана и клавиатуры будет отключена

вы должны использовать PowerManager.FULL_WAKE_LOCK для своей цели, но это устаревший API, поэтому он не является предпочтительным, и вместо этого теперь для той же цели используется FLAG_KEEP_SCREEN_ON.

<сильный>2. Вы ожидаете, что устройство выключится сразу через 5 секунд.

Этого не произойдет, потому что вы не учитываете минимальное время сна, установленное в

Настройки--->Экран----->Сон

После того, как вы отключите полную блокировку, устройству потребуется указанное выше время, чтобы перейти в спящий режим.

Я надеюсь, что это даст вам некоторые разъяснения относительно того, почему ваш код не работает.

person Sam    schedule 05.04.2015