Я пытаюсь устранить сложную, трудноразрешимую проблему (возможно, связанную с оборудованием) для open source Panic Button application. Я работаю над Amnesty. Там an issue on github about it.Кнопка сама нажата (возможно, для конкретного устройства)
Вопрос относится к LinearLayout View with Buttons. Когда отображается в this fragment, когда я пытаюсь удерживать кнопку, она просто подавляет себя через секунду. При регистрации события onClick он автоматически запускается автоматически, даже если я не выпустил свой палец с экрана.
Это происходит на телефоне Cherry Gem, и я не смог воспроизвести проблему на других телефонах.
Я удаляю много кода и добавляю много операторов регистрации, чтобы попытаться изолировать ошибку, когда обнаружил самое странное, что привело меня к публикации в Stack Overflow, поскольку это довольно странно, что, возможно, кто-то узнает рисунок:
Когда я перетаскиваю палец по экрану, ошибка исчезает! Точнее, после подтверждения на экране, что кнопка несколько раз нажата, если я удерживаю и таща пальцем, затем отпустите ее, после чего я могу удерживать нажатые кнопки без их нажатия. Wat?
Обратите внимание, что я не прошу решить проблему с попыткой обнаружить длинную печать (что, естественно, это ведет к), но пытается понять эту проблему нежелательного нажатия, прежде чем я перейду к реализации обходного пути , Поэтому я бы предпочел не переносить события на слушателей onTouch, потому что я беспокоюсь, что это не будет устранять основную причину проблемы, и я хотел бы понять, почему это происходит в первую очередь.
Я не уверен на 100%, если может быть нежелательное взаимодействие с остальной частью кода, а также попытаться создать минималистский проект с нуля только с этим кодом, если никто не распознает шаблон здесь.
Я также могу разместить небольшое видео проблемы, если это помогает. Я также рад опубликовать отрывки из кода или результаты logcat.
Спасибо за ваше время!
июня
Update
Я посмотрел на the adb shell getevent log, который подтверждает, что после .9 секунд есть EV_KEY BTN_TOUCH UP
событие. Означает ли это, что с точки зрения ОС он получает событие от аппаратного обеспечения на кнопке вверх? Я думаю, это может быть вызвано программным обеспечением.
Это привело меня к изучению программного обеспечения, установленного на телефоне, и могло помешать работе с устройствами ввода. Я отключил ввод голоса Google, а затем снова нажали кнопки. Повторная активация голосового набора Google не привела к появлению ошибки. При перезагрузке телефон снова появляется ошибка.
Я попытался посмотреть, были ли затронуты только некоторые приложения. Также был затронут предустановленный калькулятор. При использовании виртуальной клавиатуры по умолчанию ошибка не была. Но затем, возвращаясь к моему приложению, ошибка снова исчезла. Перезагрузите снова. Калькулятор по-прежнему влияет. Вернитесь к использованию виртуальной клавиатуры в браузере. Теперь ошибка остается ... Ват?
Через некоторое время я снова удалил устройство ввода текста Google Voice, и ошибка исчезла еще раз.
Я отслеживал форум, где, кажется, есть ром для этого телефона, я пытаюсь выяснить, является ли он более поздним, чем версия, которую я имею, или если кто-то еще с этим телефоном испытал эту проблему.
(я также обновил relevant github issue)
Update 2
я заметил следующее в 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 [email protected] controlFlags=#104
04-01 12:05:30.530: V/InputMethodManager(2749): Starting input: Bind result=InputBindResult{[email protected]8 com.android.inputmethod.latin/.LatinIME #45}
04-01 12:05:30.608: I/InputMethodManager(2749): handleMessage: MSG_SET_ACTIVE true, was false
Может ли это быть частью этой проблемы?
У телефона может быть плохой сенсорный экран, что характерно для дешевых китайских телефонов, и сенсорный экран может регистрировать прикосновение к нему из-за этого. Попробуйте/создайте другое приложение, поместите кнопку в том же месте на экране и посмотрите, все ли это происходит. – JonasCz
Спасибо, Jonas. Боюсь, что это не причина. Другие кнопки на других экранах или приложениях могут долгое нажатие просто отлично. Именно это делает это. – jun
Боюсь, я не знаю, почему это происходит, но если вы хотите, я могу поместить в ваш вопрос [bounty] (http://stackoverflow.com/help/bounty), который станет более заметным, и (надеюсь) ответ. Просто скажите мне это через два дня (необходимое время для ожидания), и я могу это сделать. – JonasCz