Как прослушивать клики на софтбордах с помощью сервиса AccessibilityService?

#android #android-studio #kotlin

Вопрос:

До сих пор мне удавалось прослушивать ключевые события с помощью службы доступа в Android, но я не могу получать клики с softkeyboard. Не могли бы вы помочь мне, пожалуйста, также, можно ли узнать, какую кнопку пользователь нажал на softkeyboard ? Это мой класс AcessibilityService

  class AccessService : AccessibilityService() {

   private val TAG = "AccessService"

   override fun onServiceConnected() {
       Log.e(TAG, "onServiceConnected: Our AccessService ic connected....")
   }


   override fun onAccessibilityEvent(event: AccessibilityEvent?) {
//        Log.e(TAG, "onAccessibilityEvent: ${event.toString()}")

   }

   override fun onKeyEvent(event: KeyEvent): Boolean {
       val action = event.action;
       val code = event.keyCode;
       if (action == KeyEvent.ACTION_UP) {
           if (code == KeyEvent.KEYCODE_VOLUME_UP) {
               Toast.makeText(this, "Увеличение громкость", Toast.LENGTH_SHORT).show()
           } else if (code == KeyEvent.KEYCODE_VOLUME_DOWN) {
               Toast.makeText(this, "Уменшение громкость", Toast.LENGTH_SHORT).show()
           }
       }
       return true;
   }

   override fun onGesture(gestureId: Int): Boolean {
       Log.e(TAG, "onGesture: $gestureId")
       return super.onGesture(gestureId)
   }


   override fun onInterrupt() {

   }

}
 

Это моя конфигурация для службы

 <?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:accessibilityFlags="flagRequestFilterKeyEvents"
    android:canRequestFilterKeyEvents="true"
    android:canRetrieveWindowContent="true"
    android:notificationTimeout="100"
    android:packageNames=""
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
 

И, наконец, мой файл манифеста

 <service
            android:name=".AccessService"
            android:label="Service for listening to view and focus"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/access_service_config" />
        </service>