1

我正在为 Android Wear 编写自定义表盘,我可以将设置数据从手机发送到手表。但是,当手表处于环境模式并且用户从他们的手机更改设置时,我想将手表从环境模式唤醒以显示手表的更新更改。

我试过使用电源管理器,但我得到了这个异常:

java.lang.IllegalArgumentException: Must specify a valid wake lock level.
            at android.os.PowerManager.validateWakeLockParameters(PowerManager.java:442)
            at android.os.PowerManager.newWakeLock(PowerManager.java:427)

我不明白这条消息,因为我在 newWakeLock 中设置了唤醒锁定级别。

这是我的代码:

private PowerManager.WakeLock mWakeLock;
private void wakeUpScreen(){
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    if(mWakeLock == null) {
        mWakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, 
            "CubeWatch");
        Log.d(TAG, "WAKE UP!!!!");
        mWakeLock.acquire();
    }
    if(!mWakeLock.isHeld()) mWakeLock.acquire();  //if called a second time and isn't locked
    mHandler.removeCallbacks(mRunReleaseLock);    //if already waiting, then we'll start the time over 
    mHandler.postDelayed(mRunReleaseLock, 3000);
}
Handler mHandler = new Handler();
Runnable mRunReleaseLock= new Runnable() {
    @Override
    public void run() {
        mWakeLock.release();
    }
};
4

1 回答 1

1

ACQUIRE_CAUSES_WAKEUP 必须始终与 FULL_WAKE_LOCK、SCREEN_BRIGHT_WAKE_LOCK、SCREEN_DIM_WAKE_LOCK 和/或 PARTIAL_WAKE_LOCK 结合使用。

我目前正在使用

mWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE), "wakeLock");

这有效,但警告我有关 SCREEN_BRIGHT_WAKE_LOCK 和 FULL_WAKE_LOCK 的贬值。SCREEN_DIM_WAKE_LOCK 也会折旧。也许新的唤醒锁定状态是为未来的 Android Wear 版本准备的?像 AMBIENT_WAKE_LOCK 和 INTERACTIVE_WAKE_LOCK 这样的东西会很好。目前, SCREEN_BRIGHT_WAKE_LOCK 和 FULL_WAKE_LOCK 工作得很好。

于 2015-01-06T17:02:45.577 回答