1

我有一个相当奇怪的问题。最近我尝试使用以下代码在我的应用程序中使用唤醒锁:

    /** 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 数据线连接手机时,wakelock 根本不会打开屏幕。我正在使用的设备是 HTC 的愿望。我实际上已经在另一个 HTC 愿望上测试过它,它做了同样的事情。接下来,我在 HTC Desire HD 上试了一下。猜猜看:它再次完美运行!我对此感到非常困惑,想知道问题是否只是我手机类型的缺陷,还是我的代码做错了什么。我能做些什么吗?如果任何手机类型故障的潜在客户在购买我的应用程序后遇到同样的问题,那将是非常尴尬的。

请注意,我还在使用连接到墙上插头的电缆为手机充电时尝试了该应用程序。这会导致与根本没有连接手机相同的问题。两款 HTC Desires 运行相同的 Android 版本 (2.2.2)。

4

1 回答 1

2

显然所有这些都是因为我使用了错误的标志而发生的。通过使用以下标志创建 WakeLock 解决了该问题:

PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP
于 2012-06-09T13:27:29.573 回答