iOS13怎么区分蓝牙的不同状态,是系统蓝牙未打开或者未授权微信蓝牙权限?
发布于 6 年前 作者 napan 7985 次浏览 来自 官方Issues

在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的新手机,希望能够尽早处理。

4 回复

咨询了微信开发人员,回复是state=3表示CBManagerStateUnauthorized,state=4代表

CBManagerStatePoweredOff,这应该是iOS的CoreBluetooth框架中的定义。但是如果微信文档中没有说明,开发者是不敢下这样的论断的。

谢谢微信方面的及时回复!

你用的测试版本ios13 ? 最新的ios不是 12.4.1 吗? 你用的beta版本吗? 建议等ios13正式上线后配合测试.ios13 可能是beta版本不稳定…个人见解…

ios13蓝牙授权问题我们也遇到了,目前没有什么方法可以直接了解到是应用未授权的情况,都是靠客服引导解决,后期只能持续关注 wx.getSystemInfoSync 接口看是不是会增加 bluetoothAuthorized字段。。。

有啊 你看文档 里面有写到

回到顶部