2014-10-27 51 views
2

我在这里遇到了一个非常奇怪的问题。 (在设备上运行,摩托罗拉XT910安卓4.1.2,Xamarin.Android 4.16.0)使用“PROXIMITY_SCREEN_OFF_WAKE_LOCK”唤醒键后触摸事件UP被触发

我有一个按钮的活动,用户按下一个按钮来记录一些音频。我处理onTouch事件并收听DOWN和UP事件(在DOWN上开始录制,在UP上停止)。到现在为止还挺好。 现在,我还处理onSensorChanged事件,以便在用户将设备固定在耳朵上时关闭屏幕。我用这样的激活锁定实现这一点:

private void AcquireScreenWakeLock() 
    { 
     if (screenWakeLock == null) { 
      PowerManager pm = (PowerManager)GetSystemService (Context.PowerService); 
      field = pm.Class.GetField ("PROXIMITY_SCREEN_OFF_WAKE_LOCK").GetInt (null); 
      screenWakeLock = pm.NewWakeLock ((WakeLockFlags)field, "ScreenWakeLock"); 
     } 
     screenWakeLock.Acquire(); 
    } 

private void ReleaseScreenWakeLock() 
    { 
     if (screenWakeLock == null) 
      return; 
     if (screenWakeLock.IsHeld) 
      screenWakeLock.Release(); 
    } 

按住按钮录制时,向下事件之后,我收到UP事件,而无需提起我的手指...... 当然,问题就来了还有其他的事情,我介于两者之间,但我设法缩小了问题的范围(如果我将它评论为一切按预期工作)。

我知道我在使用隐藏字段来制作wakeLock(实际上它似乎是在API 21中发布的,文档号为here),但我还没有找到更好的方法来完成此操作,并且关闭/打开整个屏幕过程完美无瑕。 我在运行Android 4.1.2的摩托罗拉XT910上进行测试时遇到了这个问题,我在运行Android 4.4.4的Moto G上测试了它,并且所有工作都正常(在按下按钮时没有启动UP事件)。

我真的很茫然,弄清楚这个......一个唤醒锁怎么会引起这种行为?你有任何其他方式来有效地关闭/开启屏幕吗?我搜索了其他帖子,但没有人似乎帮助我。使用部分wakeLock也行不通(我已经检查了这个code)。 在此先感谢!

P.S:我查过了,触摸事件只被注册一次。

+0

是否当屏幕熄灭时进入'onPause'状态的活动? – behelit 2016-06-23 04:57:15

回答

0

PROXIMITY_SCREEN_OFF_WAKE_LOCK根据接近状态自行关闭/开启屏幕。无需处理onSensorChanged事件。这可能会导致问题。