소프트 키보드 감지 또는 KeyEvent 감지와 관련된 대부분의 게시물을 읽었습니다. 나는 시야의 크기를 측정하는 것과 같은 방법을 보았다. 그러나, 제 경우의 문제는 소프트 키보드가 열려 있는지 또는 KeyEvent가 "서비스"를 사용하는지 감지하고 싶습니다. 그것은 서비스를 통해 가능합니까? 아니면 누군가가 활동에 타이핑하고 있음을 감지 할 수 있습니까? 나는 연구를하고 있으며, 활동에 타이핑을하는 것을 포함하는 전화로 몇 가지 활동을 기록해야합니다. 감사!소프트 키보드 감지 중/서비스를 사용하는 KeyEvent
3
A
답변
5
"일종의"까다로운 방법을 찾았습니다. 그러나 이것은 당신이 그 힘을 가지고 있다면 당신의 사용자가 당신을 위해 무언가를 할 것을 요구한다. :) 그래서 분명히 이것은 당신의 모든 문제를 해결하지 못할 것이다.
내 까다로운 방법은 AccessibilityEvent을 사용하는 것입니다. 청취하려는 이벤트를 지정할 수 있습니다. TYPE_WINDOW_CONTENT_CHANGED되는 창 크기와 관련된 이벤트 중 하나
공공 정적 최종 INT TYPE_WINDOW_CONTENT_CHANGED만큼 앱 사용자의 접근성 서비스가 활성화 될 때
Added in API level 14
Represents the event of changing the content of a window and more specifically the sub-tree rooted at the event's source.
Constant Value: 2048 (0x00000800)
, 당신은받을 것이다 이것은 (아래 참조) 행사.
이 이벤트를 청취하려면 자신의 AccessibilityService를 시작해야합니다. 빌드 방법은 this을 참조하십시오. 그런 다음 어떤 액세스 가능성 이벤트를 수신할지 지정할 수 있습니다. 당신은 XML 파일 중 하나를 지정할 수 있습니다
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:packageNames="MypackageName"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
/>
또는 onServiceConnected 방법
:protected void onServiceConnected() {
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
}
그런 다음 당신은 방법 onAccessibilityEvent (이벤트)의 이벤트를 받게됩니다. 그러나이 방법에는 두 가지 단점이 있습니다. 윈도우 상태가 변경 될 때마다 이벤트가 발생 될 때마다
- 이 있습니다.
- 사용자는 [설정] -> [접근성] -> [서비스]에서 접근성 서비스를 활성화해야합니다.
다시 말하면,이 방법은 특정 목적으로 만 작동합니다. 하지만 "서비스에서"소프트 키보드를 감지하고 싶지는 않지만 사용자의 활동이 아닌 경우에는 작동합니다.
관련 문제
- 1. 소프트 키보드 숨김 상태 감지
- 2. Android : 사용자 감지/키보드 입력 감지 (소프트 키보드)
- 3. EditText가없는 소프트 키보드 및 키 누름 감지
- 4. ViewPager의 소프트 키보드
- 5. EditText를 소프트 키보드 위에 놓으십시오
- 6. Android 소프트 키보드 문자가 감지되지 않습니다.
- 7. 재정의 기본 소프트 키보드
- 8. 키보드 검색 버튼을 감지
- 9. 소프트 키보드 리스너
- 10. 키보드 공간 감지
- 11. 안드로이드 소프트 키 보드에서 키보드 해지 키를 비활성화/감지
- 12. 소프트 키보드 버튼
- 13. Android 소프트 키보드 예제
- 14. 소프트 키보드 레이아웃 변경
- 15. 소프트 키보드 IME 개발
- 16. 에스프레소 소프트 키보드 유형
- 17. 소프트 키보드 입력
- 18. 소프트 키보드 - 숫자 만
- 19. 웹보기에서 안드로이드 소프트 키보드
- 20. 해제 소프트 키보드
- 21. Android 소프트 키보드 테마
- 22. 안드로이드 4.0.3 소프트 키보드
- 23. Android : 소프트 키보드 높이가
- 24. 안드로이드 소프트 키보드 문제
- 25. 키보드 감지
- 26. 소프트 키보드 입력 키 이벤트 핸들
- 27. UIWebView의 키보드 프레스 감지
- 28. EditText 필드가 겹치는 소프트 키보드
- 29. 대화 상자에 소프트 키보드 표시
- 30. 소프트 키보드 입력을 잡는 방법
저는 이것이 잘 알려진 문제에 대한 첫 번째 좋은 반응이라고 생각합니다. 감사합니다 – BQuadra
당신의 예제 코드에서'TYPE_WINDOW_CONTENT_CHANGED'을 사용하지 않았습니다 ;-). 그러나 서비스에서이 이벤트가 발생하면 'TYPE_WINDOW_CONTENT_CHANGED' 이벤트가 키보드로 인해 발생했는지 어떻게 판단 할 수 있습니까? – prom85
불행히도 'TYPE_WINDOW_CONTENT_CHANGED'는 활동 변경과 같은 다른 많은 이벤트에 의해 시작됩니다. 'TYPE_VIEW_FOCUSED' 및/또는'TYPE_VIEW_CLICKED'는 EditText가 처음으로 포커싱/터치 될 때, 즉 키보드가 사용자를 위해 열릴 때 발생합니다. 그러나 키보드가 닫히면 이벤트가 시작되지 않으므로 접근성 서비스에서 키보드가 열려 있는지 여부를 감지 할 수 없습니다. 그러나 사용자가'EditText'에'TYPE_VIEW_TEXT_CHANGED'의'EventType'과'android.widget.EditText'의'ClassName'을 더한 새로운 문자를 입력하면이를 감지 할 수 있습니다. –