Unity Android хочет BROADCAST_STICKY, BLUETOOTH и MODIFY_AUDIO_SETTINGS для доступа к микрофону - PullRequest
0 голосов
/ 28 апреля 2020

У меня проблема, когда Unity требует слишком много разрешений. Раньше я работал с Unity 2017, и моему приложению требовалось три android разрешения. Это единственные, которые мне нужны:

android.permission.RECORD_AUDIO
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE

Теперь я обновился до 2019.2.21f1 и обнаружил, что было добавлено несколько дополнительных разрешений без изменения кода:

android.permission.MODIFY_AUDIO_SETTINGS
android.permission.BROADCAST_STICKY
android.permission.BLUETOOTH

Я просмотрел весь свой код, удалив его биты, пока не обнаружил строку, которая заставила эти разрешения появиться в моем объединенном манифесте (я проверял отчет manifest-merger-release-report) - это ссылка к списку микрофонов: Microphone.devices. Когда я делаю ссылку на это, появляются разрешения.

Мне нужно сослаться на этот массив строк, потому что мне нужно вызвать Microphone.Start где-нибудь, чтобы получить аудиовход, но меня не волнует Bluetooth или трансляция липких. Я не хочу использовать ни одно из этих новых разрешений. Кто-нибудь знает, почему использование Microphone.devices может привести к появлению этих разрешений?

В настройках сборки мой минимальный уровень API равен 16, а целевой уровень API самый высокий.

Я не знаю не хочу понижать мою версию Unity снова. Я хочу найти способ просто потребовать разрешение RECORD_AUDIO без трех новых - единственный другой вариант - не использовать Microphone, что сделает мою игру менее увлекательной. Бу Ху.

1 Ответ

1 голос
/ 06 мая 2020

Теперь я не думаю, что этот ответ будет очень полезен, но так как вы кажетесь довольно отчаянным, как в случае отсутствия вариантов, так как это проблема в основной системе Unity, не могли бы вы вместо этого использовать другую библиотеку микрофонов, чем встроенный в единство?

Например, я нашел это:

NatDevice - это API-интерфейс кроссплатформенного медиа-устройства для iOS, Android, macOS и Windows. NatDevice предоставляет мощные абстракции для использования аппаратных камер и микрофонов через краткий. NET API.

https://assetstore.unity.com/packages/tools/integration/natdevice-media-device-api-162053

Вы также можете свернуть свой собственный с нативный android код, как этот парень описывает:

https://support.frozenmountain.com/hc/en-us/community/posts/115000768894-Unity-Android-Audio-Capture-Provider

Вы можете сделать это с помощью «плагина» Unity: https://docs.unity3d.com/Manual/PluginsForAndroid.html Более подробно их документы go, но общая идея заключается в том, что вы хотите написать компонент приложения, использующий собственную библиотеку, используя Java, а затем активировать его из C#. Это позволяет избежать множества дорогостоящих перекрестных вызовов между двумя средами выполнения. Используя этот подход, вы расширяете RtcLocalMedia в Java вместе с остальным кодом вашего компонента, а затем активируете этот компонент из C#.

Другой вариант - полностью перезаписать файл манифеста на исключите разрешения, которые вам не нужны (хотя вам нужно убедиться, что все работает по-прежнему, потому что от них все еще может зависеть единство)

Хорошее описание здесь:

{ ссылка }

Надеюсь, что по крайней мере это дало вам несколько идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...