Unity Android 需要 BROADCAST_STICKY、BLUETOOTH 和 MODIFY_AUDIO_SETTINGS 用于麦克风访问

Unity Android wants BROADCAST_STICKY, BLUETOOTH, and MODIFY_AUDIO_SETTINGS for Microphone access

我遇到了 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

我检查了我所有的代码,删除了其中的一些部分,直到我找到导致这些权限出现在我的合并清单中的行(我正在检查清单合并发布报告)——它是对麦克风列表的引用:Microphone.devices。当我引用它时,权限出现了。

我需要引用这个字符串数组,因为我需要在某处调用 Microphone.Start 以获得音频输入,但我不关心蓝牙或广播贴。我不想使用这些新权限中的任何一个。有谁知道为什么使用 Microphone.devices 会导致出现这些权限?

在构建设置中,我的最低 API 级别是 16,目标 API 级别是最高安装。

我不想再次降级我的 Unity 版本。我想找到一种方法,只需要 RECORD_AUDIO 权限,而不需要三个新权限——唯一的其他选择是不使用 Microphone,这会降低我的游戏乐趣。嘘。

现在我认为这个答案不会有太大帮助,但是因为你看起来很绝望,因为这是 unity 核心系统中的一个问题,所以没有选择,你能不能尝试使用不同的麦克风库比统一的内置库?

例如我发现这个:

NatDevice is a cross-platform media device API for iOS, Android, macOS, and Windows. NatDevice provides powerful abstractions for using hardware cameras and microphones through a concise .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

You can do it using a Unity "plugin": https://docs.unity3d.com/Manual/PluginsForAndroid.html Their docs go into more detail, but the general idea is that you want to write the app component that uses the native library using Java, and then activate it from C#. This avoids a lot of expensive cross-calls between the two runtimes. Using this approach, you would extend RtcLocalMedia in Java along with the rest of your component code, and then activate that component from C#.

另一种选择是完全覆盖清单文件以排除您不需要的权限(尽管您需要确保它仍然有效,因为 unity 仍可能依赖于它们)

这里有一个很好的描述:

希望这至少给了你一些想法。

如果您想使用蓝牙耳机中内置的麦克风,您需要包含这些权限。使用蓝牙麦克风时 AudioManager 需要它们。