“ Info.plist文件有一个新密钥:NSBluetoothAlwaysUsageDescription,您可以用它来解释您的应用如何和为什么使用蓝牙。与现有的NSBluetoothPeripheralUsageDescription相比,新描述将是显示为新弹出窗口的一部分,也显示在“蓝牙隐私”屏幕上的“设置”应用中。“
更新到iOS 13之后,我们确信应用程序崩溃了,我敢肯定很多人都这么做了。我们的问题是由于Xamarin.iOS项目Info.plist文件中未包括新要求的蓝牙密钥。
但是在加载后在添加第一个“操作”后将其添加给用户新的蓝牙访问提示。
我们还没有清楚地看到如何捕获对此提示的响应。该提示与应用程序进行交互后,实际上没有“返回”点。无法完全找到提示交互/结果处理的断点,因此我们的应用程序永远不会从提示返回。它正在运行,但不会发生下一个“动作”。
因此,如何在iOS 13中捕获/处理用户与新蓝牙提示的交互?
注意*:绝对透明-我们的应用程序不初始化CBCentralManager的任何实例,而是利用本身在内部使用Bluetooth LE的本机框架(不受我们控制)。
我们的情况可能非常独特,但是对于那些体验此工具CBCentralManager
并利用其UpdatedState
方法来捕获用户与新呈现的蓝牙对话的交互的语言。
在我们的应用程序主页的页面创建中调用了初始化
BleManager = new BluetoothManager();
班级
using System;
using CoreBluetooth;
namespace MyApp.iOS.Classes
{
public class BluetoothManager
{
public CBCentralManager CentralBleManager
{
get { return this.bleCntrlMgr; }
}
protected CBCentralManager bleCntrlMgr;
protected CBCentralManagerDelegate bleMgrDel;
public BluetoothManager()
{
this.bleCntrlMgr = new CoreBluetooth.CBCentralManager();
this.bleCntrlMgr.UpdatedState += BleMgr_UpdatedState;
}
private void BleMgr_UpdatedState(object sender, EventArgs e)
{
Console.WriteLine("UpdatedState: {0}", bleCntrlMgr.State);
if (bleCntrlMgr.State == CBCentralManagerState.PoweredOn
|| bleCntrlMgr.State == CBCentralManagerState.PoweredOff
|| bleCntrlMgr.State == CBCentralManagerState.Resetting
|| bleCntrlMgr.State == CBCentralManagerState.Unauthorized
|| bleCntrlMgr.State == CBCentralManagerState.Unsupported)
{
/* return point */
// i.e.: CallMethod();
}
else if (bleCntrlMgr.State == CBCentralManagerState.Unknown)
{
/* <-- request access --> */
}
}
}
}