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