Я погружаюсь в новый проект, в котором для передачи голоса используется микрофонный вход. Аудио записывается с помощью Service
, захват может быть запущен из пользовательского интерфейса (например, Activity
), но также и со стороны сервера (какой-то вид подслушивания) или посредством трансляции из другого приложения. Функция хорошо работает во всех версиях Android.
Теперь у меня есть задача обрабатывать некоторые ключи (KeyEvent
), даже когда приложение находится в фоновом режиме, но вышеупомянутая служба переднего плана работает. Итак, я сделал AccessibilityService
с переопределением onKeyEvent(KeyEvent event)
, проверка внутри - это запущенная служба и обработка правильных ключей при необходимости. Эта функция также отлично работает.
НО я только что заметил странное поведение на Android 10 - тишина от mi c, когда AccessibilityService
включен ... Когда я выключаю его mi c начинает работать. На Android 9 и ниже аудиозахват работает всегда независимо от состояния включения / выключения.
Я нашел руководство в документах с некоторой информацией об изменении поведения обработки аудиовхода и диспетчеризации это, но я не вижу раздела, связанного с моей ситуацией. Функция захвата звука и служба доступности принадлежат одному приложению, и эта служба нужна только для работы с ключами. Возникает вопрос, почему мой сервис ломает mi c на Android 10 и как это предотвратить?
В качестве бонуса - XML с конфигурацией
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes=""
android:accessibilityFeedbackType="feedbackSpoken|feedbackHaptic"
android:accessibilityFlags="flagRequestFilterKeyEvents"
android:canRequestFilterKeyEvents="true"
android:canRetrieveWindowContent="false"
android:description="@string/accessibility_permission_desc"
android:notificationTimeout="25"
android:packageNames="my.package.name"
android:settingsActivity="" />