2014-07-16 34 views
1

我正在为Android Wear写一个自定义手表面部,并且我能够从手机发送设置数据到手表就好。但是,当手表处于环境模式且用户从手机更改设置时,我想从Ambient Mode中唤醒手表以显示手表的更新更改。伴侣移动应用程序从环境模式醒来穿戴设备

我一直使用的Power Manager试过,但我得到这个异常:

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(); 
    } 
}; 
+0

您是否找到针对您的问题的解决方案? – Umair

回答

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也折旧。也许新的Wake Lock状态为未来的Android Wear版本做好了准备?像AMBIENT_WAKE_LOCK和INTERACTIVE_WAKE_LOCK会很好。目前,SCREEN_BRIGHT_WAKE_LOCK和FULL_WAKE_LOCK工作得很好。

相关问题