iOS 13-如何检查用户是否已接受蓝牙权限?

phn*_*mnn 1 ios

作为iOS 13的一部分,如果应用想要访问蓝牙,则现在需要请求权限。 在此处输入图片说明

如何检查用户是否已接受蓝牙许可?

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)

  • 这似乎是中央侧连接(最常见的情况)的最佳/最正确的答案,因为它仅涉及中央管理器,并处理 13.0 和 13.1+ API。 (2认同)
  • 警告:这将导致 ios13.0 上出现警报,不断要求用户授权 app ble 权限。使用 CBCentralManager(delegate,queue,options) 代替,并将 CBCentralManagerOptionShowPowerAlertKey 设置为 false。 (2认同)

Nev*_*oon 7

有趣的是,启动时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,不处理低于该版本的任何内容。


rma*_*ddy 5

CBCentralManager延伸CBManager。从iOS 13开始,CBManager具有authorization属性。

使用此属性来确定权限是未知,允许,拒绝还是受限。

为了清楚起见,在iOS下,您需要使用instance属性authorization,而不是同名的type属性。确保您访问authorization的实例CBCentralManager

  • @Franlon 请发布您自己的问题以及所有相关详细信息和代码。 (2认同)

Jos*_*art 5

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)

  • 这并非特定于 Swift 5。此代码在 Swift 4 和 4.2 中也可以按原样工作。 (3认同)