Разрешение на захват звука для системного приложения Android

#android #audio

Вопрос:

Я смог создать системное приложение для захвата звука других приложений в системе Android 10 с помощью API захвата воспроизведения Android. Однако ему не удалось записать звук некоторых приложений с целевым SDK 28 (он будет работать, как только я обновлю эти приложения до целевого SDK 29).

Это озадачивает, потому что, согласно официальному документу Android, а также этому блогу, системное приложение по умолчанию должно иметь возможность записывать звук других приложений, если это не было запрещено приложением намеренно (не в моем случае).

Комментарии:

1. и в чем же заключается вопрос? если какое-либо приложение ограничивает запись звука и это системная политика, то вы просто не услышите это приложение, для уверенности, что вы не должны исключать это приложение для этой цели, система просто не позволит вам записать этот источник

2. Чтобы прояснить мой вопрос, мое системное приложение, скажем, Alpha, работающее в SDK 29, предположительно может записывать другое приложение, скажем, бета-версию, потому что бета-версия не имеет никаких ограничений в своем манифесте. Но на самом деле Альфа может записывать аудио бета-версии только в том случае, если Бета-версия также имеет свой целевой SDK в 29. Я только что получил бесшумный звук, если бета-версия останется в целевом SDK 28, и в выводе logcat нет никакой соответствующей ошибки. Кстати, Альфа работает с использованием системного идентификатора и находится в системной папке /системе/приложении, поэтому я думаю, что у нее правильный приоритет.

Ответ №1:

ну, в связанном документе есть примечание (в ЭТОМ абзаце), в котором описывается такое поведение

Примечание. Возможность записи звука приложения также зависит от версии targetSdk приложения.

По умолчанию приложения, предназначенные для версий до Android 9.0 включительно, не разрешают захват воспроизведения. Чтобы включить его, включите android:allowAudioPlaybackCapture=»true» в приложении. manifest.xml файл.

По умолчанию приложения, предназначенные для Android 10 (уровень API 29) или выше, позволяют записывать их аудио. Чтобы отключить захват воспроизведения, включите android:allowAudioPlaybackCapture=»false» в приложении manifest.xml файл.

Комментарии:

1. Да, я действительно читал эту заметку, но, насколько я понимаю, она относится только к несистемным приложениям. В моем случае мое приложение для захвата звука является системным приложением.

2. Я думаю, что это было бы просто как-то неуверенно… Когда был представлен API29, большинство приложений еще не поддерживали его (без флага), и некоторые из них могли воспроизводить «личное аудио». Система не будет знать об уровне конфиденциальности, поэтому на всякий случай отключает все незаявленные приложения. И «объявление» может пониматься как allowAudioPlaybackCapture введение флага в код ИЛИ изменение таргетинга (так как разработчик должен прочитать список изменений и настроить некоторые атрибуты и код приложения, вкл. над флагом)

3. Кроме того, некоторые разработчики могут решить, что их аудиоданные настолько чувствительны, что их не следует записывать ни в ОДНО приложение, кроме того, разработчики знают о рутинге и создании собственного/собственного приложения для записи в качестве системного

4. Спасибо, @snachmsm. То, что ты сказал, имеет для меня смысл. С другой стороны, официальный документ и страница блога, приведенные в моем первоначальном посте, похоже, свидетельствуют об обратном. Мне нужно будет копнуть глубже.

5. не забудьте сообщить нам, напишите ответ, когда найдете подтверждение 🙂 удачи!

Ответ №2:

Благодаря помощи моего коллеги, мое приложение заработало после моего

  1. обновление системного приложения до привилегированного приложения, чтобы иметь разрешение CAPTURE_MEDIA_OUTPUT
  2. установка для частного поля mAllowPrivilegedPlaybackCapture значения «true» в объекте AudioMixingRule.

№ 2 выше-это ключ, который ускользнул от меня во время моей последней неудачной попытки.