al_*_*ota 15
尝试这个:
var isBluetoothPermissionGranted: Bool {
if #available(iOS 13.1, *) {
return CBCentralManager.authorization == .allowedAlways
} else if #available(iOS 13.0, *) {
return CBCentralManager().authorization == .allowedAlways
}
// Before iOS 13, Bluetooth permissions are not required
return true
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,启动时iOS 13.1可以在不分配的情况下检查 BT 权限CBManager。这是一个巨大的优势,因为CBManager如果之前没有询问/给予 BT 权限,初始化将自动触发系统弹出窗口。
func checkPermission() -> CBManagerAuthorization {
if #available(iOS 13.1, *) {
return checkPermissionBeforeCBManagerAllocation()
} else {
return checkPermissionLegacy()
}
}
@available(iOS 13.1, *)
private func checkPermissionBeforeCBManagerAllocation() -> CBManagerAuthorization {
CBCentralManager.authorization
}
private func checkPermissionLegacy() -> CBManagerAuthorization {
let manager = CBCentralManager(delegate: self, queue: nil)
return manager.authorization
}
Run Code Online (Sandbox Code Playgroud)
上面只是版本的示例iOS 13.x,不处理低于该版本的任何内容。
CBCentralManager延伸CBManager。从iOS 13开始,CBManager具有authorization属性。
使用此属性来确定权限是未知,允许,拒绝还是受限。
为了清楚起见,在iOS下,您需要使用instance属性authorization,而不是同名的type属性。确保您访问authorization的实例CBCentralManager。
Swift 5 IOS 13: 基于接受的答案:
func isBluetoothAuthorized() -> Bool {
if #available(iOS 13.0, *) {
return CBCentralManager().authorization == .allowedAlways
}
return CBPeripheralManager.authorizationStatus() == .authorized
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |