我正在尝试解决我为Amnesty工作的open source Panic Button application棘手,难以重现(因此可能与硬件相关)的问题。有an issue on github about it。
问题在于LinearLayout View with Buttons。当在this fragment中显示时,当我尝试按住按钮时,它会在一秒钟之后完全取消。记录onClick事件时,即使我没有从屏幕上释放手指,它也会自动触发。
这种情况发生在Cherry Gem手机上,我无法在其他手机上重现这个问题。
我一直在删除大量代码并添加大量日志语句,以便在我发现最奇怪的事情时尝试隔离错误,这导致我在Stack Overflow上发布这个,因为它很奇怪,可能有人会认识到图案:
当我在屏幕上拖动手指时,虫子会消失!更准确地说,在屏幕上确认按钮自动按下几次后,如果我按住并拖动手指,然后释放它,之后我可以按住按钮而不用它们自己压制。的笏吗
请注意,我并不是要求解决尝试检测长按的问题(当然这会导致这种问题),而是在我继续实施解决方法之前尝试理解这个不受欢迎的问题。因此,我也不愿意将事件移动到onTouch监听器,因为我担心它不能解决问题的根本原因,我想先了解为什么会发生这种情况。
我不是100%确定是否可能与代码的其余部分进行不必要的交互,并且如果没有人识别此处的模式,也会尝试从头开始创建一个简约项目,只有那些代码。< / p>
如果有帮助,我也可以发布一个小问题视频。我也很高兴发布代码摘录或logcat结果。
谢谢你的时间!
君
我查看了the adb shell getevent log,确认在.9秒后有一个EV_KEY BTN_TOUCH UP
事件。这是否证实从操作系统的角度来看,它是从硬件接收关于按钮的事件?我想这可能也是由软件引发的。
这使我开始研究手机上安装的软件,可能会干扰输入设备。我已停用Google语音输入,然后按住按钮再次工作。重新激活Google语音输入并未使错误重新出现。重新启动手机然后重新出现错误。
我试着看一下只有一些应用程序受到影响。预安装的计算器也受到影响。使用默认虚拟键盘时,错误没有发生。但是当我回到我的应用程序时,bug再次消失了。再次重新启动。计算器仍受影响。返回使用浏览器中的虚拟键盘。现在这个bug仍然存在...... Wat?
过了一会儿,我再次移除了Google语音输入设备,错误再次消失。
我已经跟踪了一个论坛,其中似乎有这款手机的rom,我试图找出它是否比我的版本更新,或者是否有其他人使用这款手机也遇到了这个问题。< / p>
(我还更新了relevant github issue)
我在logcat中注意到以下内容:
04-01 12:05:30.484: V/PhoneWindow(2749): DecorView setVisiblity: visibility = 0
04-01 12:05:30.525: V/InputMethodManager(2749): onWindowFocus: null softInputMode=288 first=true flags=#1810100
04-01 12:05:30.528: V/InputMethodManager(2749): START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{41aa5ef8 V.E..... R.....ID 0,0-480,800} ic=null tba=android.view.inputmethod.EditorInfo@41a3fef8 controlFlags=#104
04-01 12:05:30.530: V/InputMethodManager(2749): Starting input: Bind result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41a48da8 com.android.inputmethod.latin/.LatinIME #45}
04-01 12:05:30.608: I/InputMethodManager(2749): handleMessage: MSG_SET_ACTIVE true, was false
这可能是问题的一部分吗?
答案 0 :(得分:1)
对于诸如此类的奇怪问题,我认为覆盖 onTouchEvent 侦听器并观察触发了哪个 MotionEvent 非常有用(例如ACTION_MOVE,ACTION_UP /下)。根本问题可能是设备的触摸屏驱动程序。因此,使用onTouchEvent测试该驱动程序可能会很好。
我认为,有一个很好的网页@ Touch Device Configuration。搜索文本&#34;驱动程序报告信号强度为压力&#34;。我认为这很有趣,也许您只需更改touch.pressure的值。校准或/和比例进行故障排除。此文件具有idc的扩展名,应驻留在系统子目录中。
我想提供示例代码来覆盖鼠标/滑动事件:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
// Make sure ACTION_DOWN is dispatched to children view
case MotionEvent.ACTION_DOWN:
onTouchEvent(ev);
// Allow the children view to process this action
return false; // skip calling onInterceptTouchEvent
case MotionEvent.ACTION_MOVE:
onTouchEvent(ev);
return false;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mDownX = (int)event.getX();
mDownY = (int)event.getY();
break;
case MotionEvent.ACTION_MOVE:
...
注意: