andriod 12以上开蓝牙BLE闪退问题修复

- Android 12(API 级别 31)或更高版本引入了新的权限管理机制
- 官方给的答案在这里https://developer.android.com/develop/connectivity/bluetooth/bt-permissions?hl=zh-cn下边回答是解决办法(现在高版本的Android要用户授权)
  1. 找到你的android/app/src/main/AndroidManifest.xml文件改Install | react-native-ble-manager
  2.  "react-native-ble-manager": "^11.3.2",更新你的包
  3. 在请求连接蓝牙的地方给他查有权限没,没权限就去授权react-native-ble-manager/example/components/ScanDevicesScreen.tsx at master · innoveit/react-native-ble-manager · GitHub 392行
    export const handleAndroidPermissions = async () => {
      let permissionsStatus = false; // 初始值没权限
      if (Platform.OS !== 'android') return permissionsStatus; 如果不是Android 我们就不需要整这个权限了
      if (Platform.Version >= 31) {
        try {
          const result = await PermissionsAndroid.requestMultiple([  // 高版本申请权限
            PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
            PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
          ]);
          if (result['android.permission.BLUETOOTH_CONNECT'] === 'granted') {// 只能申请两次,如果两次都拒绝,就需要用户手动去给开蓝牙权限了
            permissionsStatus = true;
            console.debug('[handleAndroidPermissions] User accepts runtime permissions android 12+');
          } else {
            permissionsStatus = false;
            console.error('[handleAndroidPermissions] User refuses runtime permissions android 12+');
          }
        } catch (error) {
          permissionsStatus = false;
          console.error('[handleAndroidPermissions] User refuses runtime permissions android 12+', error);
        }
      } else if (Platform.Version >= 23) {// 保证统一性,低版本也给他查权限,开权限
        try {
          const requestResult = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION);
          if (requestResult) {
            permissionsStatus = true;
            console.debug('[handleAndroidPermissions] User accepts runtime permission android <12');
          } else {
            permissionsStatus = false;
            console.error('[handleAndroidPermissions] User refuses runtime permission android <12');
          }
        } catch (error) {
          console.error('[handleAndroidPermissions] User refuses runtime permission android <12');
        }
      }
      return permissionsStatus;
    };
  4. 有权限以后把这个权限状态更新到redux里面
    const openBLEPermission = useCallback(async () => {
        if (!bleAuthStatus) {
          const status = await handleAndroidPermissions();
          dispatch(setBLEAuthStatus(status));
        }
      }, [bleAuthStatus, dispatch]);
  5. 然后你根据自己需求,有权限以后再使用Ble就行,反正就是没权限之前不能动BLE,注意区分ios,别给ios整坏了

  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值