我遇到了一个非常奇怪的问题。(在设备上运行,摩托罗拉XT910安卓4.1.2,Xamarin.Android 4.16.0)
我有一个活动,有一个按钮,用户按下并按住它来录制一些音频。我处理onTouch事件并监听DOWN和UP事件(on DOWN我开始记录,on UP我停止它)。到目前一切尚好。现在,我还处理了onSensorChanged事件,以便在用户将设备举到耳朵上时关闭屏幕。我是通过使用这样的wakelock来实现的:
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();
}当按下并按住按钮进行记录时,问题出现了,在DOWN事件之后,我在没有抬起手指的情况下收到了UP事件……当然,我还做了其他事情,但我设法将问题缩小到这段代码(如果我注释掉它,一切都像预期的那样工作)。
我知道我正在使用一个隐藏字段来制作wakeLock (实际上它似乎是在API21,docs here中发布的),但是我还没有找到更好的方法来做这件事,并且整个屏幕的关闭/打开过程都可以完美地工作。我在运行安卓4.1.2的摩托罗拉XT910上测试时遇到了这个问题,我在运行安卓4.4.4的Moto G上测试了它,一切都运行得很好(按住按钮时没有UP事件被触发)。
我真的不知所措,这个out...how能导致这种行为吗?你有没有其他方法可以有效地关闭/打开屏幕?我搜索了其他帖子,但似乎没有一个对我有帮助。使用部分wakeLock也不起作用(我已经用这个code检查过了)。提前感谢!
附言:我已经检查过了,触摸事件只注册了一次。
发布于 2015-06-08 17:19:52
PROXIMITY_SCREEN_OFF_WAKE_LOCK根据自身的接近状态关闭/打开屏幕。也不需要处理onSensorChanged事件。这可能会导致问题。
https://stackoverflow.com/questions/26594963
复制相似问题