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

1

У меня довольно странная проблема. В последнее время я попытался использовать 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();
    }
}

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

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

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

Теги:
usb
android-wake-lock
wakelock

1 ответ

2
Лучший ответ

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

PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP

Ещё вопросы

Сообщество Overcoder
Наверх
Меню