我有一个相当奇怪的问题。最近我尝试使用以下代码在我的应用程序中使用唤醒锁:
/** 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)。
答案 0 :(得分:2)
显然所有这一切都只是因为我使用了错误的标志。通过使用以下标志创建WakeLock解决了该问题:
PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP