iOS模拟器在请求麦克风权限时崩溃了

3

我的环境:

  • permission_handler 3.0.0
  • Flutter v1.2.1
  • OSX High Sierra 10.13.6
  • Xcode版本10.1。

我在iOS模拟器中请求麦克风权限时,我的应用程序崩溃了。

PermissionStatus mic = await PermissionHandler()
    .checkPermissionStatus(PermissionGroup.microphone);
print('microphone permission? ${mic.toString()}');
try {
    if (mic != PermissionStatus.granted) {
        await PermissionHandler().requestPermissions([PermissionGroup.microphone]);
    }
} catch (e) {
    print(e);
}

没有错误被抛出或捕获,但在Flutter调试控制台中,我看到:
flutter: microphone permission? PermissionStatus.unknown
Lost connection to device.

这意味着checkPermissionStatus()返回了 unknown。但是当我请求权限时,应用程序崩溃了。我无法在真正的iPhone上试验这个问题。在Android模拟器上一切都完美运作。
我发现Xcode 10.1的麦克风存在一些问题: 我尝试过
  • 使用 flutter clean 进行新编译
  • 在Hardware > Audio Input中更改模拟器麦克风输入
我可以尝试升级到Xcode 10.2,但我需要先获得mojave。如果可能的话,尽量避免这样做,因为它可能甚至不能解决问题。我也可以尝试使用一个真正的iPhone设备代替模拟器。然而,我仍希望能使模拟器不崩溃。
有人能够在 Xcode 10.1/10.2 模拟器上使用 permission_handler:3.0.0授予麦克风权限吗?其他Flutter权限插件呢?

我对Flutter一无所知,但我认为你已经回答了自己的问题。有很多东西在模拟器上根本不起作用,这很可能就是其中之一。 - matt
@matt 但是看我链接的 Stack Overflow 的问题,似乎人们至少能够在应用程序崩溃之前授予麦克风权限。 - Corey Cole
我建议Flutter也许可以改变这个方程式。 - matt
当然可以在模拟器中使用麦克风(它将使用Mac的麦克风)。尝试点击两次主页按钮(调用Siri),并检查Siri是否正常工作,以确保您的Mac一切正常。也许您的麦克风被阻止了。 - czater
你一定会发现你的错误在info.plist文件中。打开runner.xcworkspace并导航到info.plist文件,为麦克风添加权限。 - Tejas Badani
1个回答

7
请确保已将正确的条目添加到 Info.plist 文件中(对于Flutter项目,此文件位于ios/Runner/文件夹中)。
要访问麦克风,您需要在 <dict> 标签之间添加以下行:
<key>NSMicrophoneUsageDescription</key>
<string>this application needs access to the microphone</string>

更多信息可以在这里找到。

完整的Info.plist示例可以在这里找到。


是的!就是这样。我添加了 UIBackgroundModes->audio,但没有添加 NSMicrophoneUsageDescription - Corey Cole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接