iOS13怎么区分蓝牙的不同状态,是系统蓝牙未打开或者未授权微信蓝牙权限?
在iOS13中,蓝牙变成了和位置,通知服务等同样的可以针对单个app授权的服务。用户可以在设置中关闭微信的Bluetooth Sharing,这样即使系统蓝牙打开了,小程序仍然无法使用BLE服务。 三种情况: a.手机蓝牙未打开 b.手机蓝牙已打开,微信的蓝牙服务关闭 c.两者均打开 在目前的小程序API中,我们可以通过获取system Info来查看蓝牙是否打开(bluetoothEnabled).然而在情况a和b中,该参数均为false。这样我们无法准确提示用户去打开系统蓝牙或者打开微信的蓝牙授权了。 另一种方式是在wx.openBluetoothAdapter(Object object) 这个接口中,情况a返回的error为: {"state": 4,"errCode":10001,"errMsg":"openBluetoothAdapter:fail open fail"} 情况b返回的error为: {"state": 3,"errCode":10001,"errMsg":"openBluetoothAdapter:fail open fail"} 开发者或许可以通过这个state来区分这两种情况,但是在官方文档中并未给出state的具体定义。 我相信在iOS13中,小程序API会有所更新。希望能够补充这种state的定义,同时给出更多蓝牙的选项。 下面是iOS中关于state的定义,我猜测微信直接引用这部分定义: typedef NS_ENUM(NSInteger, CBCentralManagerState) { CBCentralManagerStateUnknown = CBManagerStateUnknown, CBCentralManagerStateResetting = CBManagerStateResetting, CBCentralManagerStateUnsupported = CBManagerStateUnsupported, CBCentralManagerStateUnauthorized = CBManagerStateUnauthorized, CBCentralManagerStatePoweredOff = CBManagerStatePoweredOff, CBCentralManagerStatePoweredOn = CBManagerStatePoweredOn, } NS_DEPRECATED(10_7, 10_13, 5_0, 10_0, "Use CBManagerState instead"); 这个问题已经有用户遇到,应该是购买的iOS13的新手机,希望能够尽早处理。