美文网首页
iOS 蓝牙开发弹窗问题记录

iOS 蓝牙开发弹窗问题记录

作者: 静守幸福 | 来源:发表于2023-01-06 19:11 被阅读0次

    App蓝牙权限弹窗一直有问题,最近做了修复做下记录:

    开发环境 Xcode14.2 swift 5.0 CoreBluetooth

    蓝牙主要有2个参数状态

    CBManager 下的 state 和 authorization

    state 
    public enum CBManagerState : Int, @unchecked Sendable {
    
        case unknown = 0         //未知状态,即将更新
    
        case resetting = 1          //与系统服务的连接暂时丢失,即将更新
    
        case unsupported = 2   // 该平台不支持低功耗蓝牙中央/客户端角色 (还没遇到过)
    
        case unauthorized = 3   // 该应用程序未被授权使用低功耗蓝牙角色 (拿到这个情况的时候 肯定是用户禁止了你的蓝牙权限 要弹窗 设置权限;)
    
        case poweredOff = 4      // 蓝牙关闭 (关闭了蓝牙或者在控制中心关闭了蓝牙连接的时候 你获取到的是这个状态 )
    
        case poweredOn = 5    // 蓝牙打开并且可以连接 (可以愉快的开始开发了)
    }
    
    authorization 13.0 到 13.1 是实例方法;13.1 之后是类方法
    public enum CBManagerAuthorization : Int, @unchecked Sendable {
    
        case notDetermined = 0  // 用户还没做出选择
    
        case restricted = 1    // 此应用程序无权使用蓝牙。 用户无法更改此应用程序的状态,这可能是由于活动限制(例如家长控制到位)所致。
    
        case denied = 2     // 用户已明确拒绝此应用程序使用蓝牙。 对应用授权不允许(在此种状态下拿到的 state 是 unauthorized 并不能知道当前蓝牙是打开还是关闭的)
    
        case allowedAlways = 3  // 用户已授权此应用程序始终使用蓝牙 (可以愉快的开始开发了)
    }
    

    蓝牙可能的系统弹窗

    • 授权弹窗 应用访问蓝牙的时候会去进行授权弹窗 第一次安装使用蓝牙的时候弹出 在Info.plist 配置权限
      说明: 必弹出
    • 提示打开蓝牙的弹窗
      跟 CBCentralManagerOptionShowPowerAlertKey 这个Key 有关系
      如果在实例化 CBCentralManager 时蓝牙关闭,系统应该显示给用户的警告对话框,弹出一次
      说明:可以关闭 关闭方法 在初始化CBCentralManager 设置options(见下面) 关闭之后 需要自己弹窗了
    CBCentralManagerOptionShowPowerAlertKey 默认 是 true 设置成 false 就不提示了
    CBCentralManager(delegate: self,  queue: DispatchQueue.main, options:   [CBCentralManagerOptionShowPowerAlertKey: false])
    

    蓝牙权限流程图

    按照这个顺序检查弹窗就不会有问题

    如果你想先检查蓝牙的状态 state;

    • 当是 poweredOn 或者 poweredOff 的时候,你已经肯定得到了授权;
    • 当是 unauthorized 的时候 证明用户关闭了你的蓝牙授权权限,这时候 你是肯定不知道蓝牙是开启还是关闭的,要先请求权限,获取权限之后,再判断 是poweredOn 或者 poweredOff

    相关文章

      网友评论

          本文标题:iOS 蓝牙开发弹窗问题记录

          本文链接:https://www.haomeiwen.com/subject/zmwscdtx.html