Wakelock работает только с подключенным usb-кабелем

У меня довольно странная проблема. В последнее время я пытался использовать wakelock в своем приложении, используя следующий код:

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
    screenLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen");
    button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            System.out.println("Clicked");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (!locked)
                setKeepScreenOn(WakeupLightActivity.this, true);
            else setKeepScreenOn(WakeupLightActivity.this, false);
            System.out.println("Screen will stay on");
        }
    });
}

public void setKeepScreenOn(Activity activity, boolean keepScreenOn) {
    if(keepScreenOn) {                    
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);          
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        this.screenLock.acquire();
    } 
    else {                                 
       activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);             
       activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        this.screenLock.release();
    }
}

Вейклок работает отлично: через 5 секунд после нажатия кнопки (и блокировки телефона) включается экран. Однако этот тест был проведен, когда мой телефон был подключен к ноутбуку для отладки с помощью USB-кабеля.

Теперь самое странное. Когда мой телефон НЕ подключен к USB-кабелю, вейклок просто НЕ ВКЛЮЧАЕТ экран. Устройство, которое я использую, является желанием HTC. На самом деле я проверил это на другом желании HTC, которое сделало то же самое. Затем я попробовал это на HTC Desire HD. И угадайте, что: он снова работал отлично! Я действительно смущен этим и задаюсь вопросом, является ли проблема просто недостатком моего типа телефона или я делаю что-то неправильно в своем коде. Могу ли я что-нибудь с этим поделать? Было бы невероятно неловко, если бы потенциальные клиенты с неисправным типом телефона столкнулись с той же проблемой после покупки моего приложения.

Обратите внимание, что я также пробовал приложение во время зарядки телефона с помощью кабеля, подключенного к настенной розетке. Это приводит к той же проблеме, что и мой телефон вообще не подключен. Оба HTC Desires работают под управлением одной и той же версии Android (2.2.2).


person Sennohej    schedule 07.06.2012    source источник


Ответы (1)


По-видимому, все это произошло просто потому, что я использовал неправильные флаги. Проблема решилась созданием WakeLock со следующими флагами:

PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP
person Sennohej    schedule 09.06.2012