如何在iOS中为迁移的Maui应用程序获取蓝牙权限

eagi6jfj  于 2023-04-08  发布在  iOS
关注(0)|答案(1)|浏览(318)

我正在将一个Xamarin.Forms应用程序迁移到MAUI,所以我的解决方案仍然有:
共享项目
Android项目
iOS项目
我的iOS项目要求用户提供蓝牙权限,
表示info.plist中所有必需的字符串:

NSBluetoothPeripheralUsageDescription

NSBluetoothAlwaysUsageDescription

Privacy - Bluetooth Peripheral Usage Description

Privacy - Bluetooth Always Usage Description

共享项目中的权限服务和每个平台中的提供者。
iOS提供程序创建CBCentralManager示例,创建后用户应该收到要求蓝牙权限的警报:

public async Task<bool> RequestBluetoothPermission()
{
   var manager = new CBCentralManager(null, null, new CBCentralInitOptions { });
   var state = manager.State == CBManagerState.PoweredOn;
}

在我迁移的应用程序中,iOS上不会发生这种情况。
管理器已创建,其状态为CBManagerState.Unknown,并且不显示警报。
有谁知道如何让迁移的毛伊岛应用程序要求蓝牙权限?

更新

获取蓝牙权限的原始方法:

public async Task<bool> RequestBluetoothPermission()
    {
        //iOS 13.0 and below
        if (!UIDevice.CurrentDevice.CheckSystemVersion(13, 1))
        {
            return true;
        }

        //iOS 13.1 and above
        if (CBManager.Authorization == CBManagerAuthorization.NotDetermined)
        {
            TaskCompletionSource<CBCentralManagerState> tcs = new TaskCompletionSource<CBCentralManagerState>();
            Action<CBCentralManagerState> handleBluetoothStateChangedForFirstTime = delegate (CBCentralManagerState bluetoothState)
           {
               HandleBluetoothStateChanged(bluetoothState);
               tcs.TrySetResult(bluetoothState);
           };

            var simpleCBCentralManagerDelegate = new SimpleCBCentralManagerDelegate();
            simpleCBCentralManagerDelegate.StateChanged += handleBluetoothStateChangedForFirstTime;

            _cBCentralManager = new CBCentralManager(simpleCBCentralManagerDelegate, null, new CBCentralInitOptions() { ShowPowerAlert = false });
            var status = await tcs.Task;

            simpleCBCentralManagerDelegate.StateChanged -= handleBluetoothStateChangedForFirstTime;
            simpleCBCentralManagerDelegate.StateChanged += HandleBluetoothStateChanged;

            return status != CBCentralManagerState.Unauthorized;
        }

        // In any else case we can't ask again so we just return the current permission status
        return CBManager.Authorization == CBManagerAuthorization.AllowedAlways;
    }
kknvjkwl

kknvjkwl1#

所以很明显,我们使用的微软自动迁移工具没有在iOS项目中使用info.plist。
我应该早点注意到它,因为我们有几个关于MAUI使用的最终文件中缺少键的构建警告。
这个答案让我走上了正确的道路:https://github.com/dotnet/maui/issues/9122#issuecomment-1249177463
我只是修改了一下:

<ItemGroup>
    <BundleResource Include="Info.plist" Link="Info.plist" />
</ItemGroup>

其中info.plist文件直接位于iOS的项目文件夹下。

相关问题