Android 12 蓝牙权限(解决闪退问题)

项目配置是compileSdkVersion31 targetSdkVersion30  手机升级了Android 12后运行Crash。照理说targetSdkVersion没有用31,怎么会报Android 12的蓝牙权限错误,百思不得其解,先来看看Android12的蓝牙权限。

1.Manifest权限

   

     

 

   

   

   

   

 

      

  

  

 

 



2.动态请求相关蓝牙权限

BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT和BLUETOOTH_SCAN权限是运行时权限。因此必须在应用程序中明确请求用户批准,才能查找蓝牙设备,使设备可被其他设备发现,或与已经配对的蓝牙设备通信。当你的应用程序请求这些权限中的至少一个,系统提示用户允许你的应用程序访问附近的设备,如图1所示。

//所以请加上这段代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

    if (!checkSinglePermission(Manifest.permission.BLUETOOTH_SCAN) ||!checkSinglePermission(Manifest.permission.BLUETOOTH_CONNECT)) {

        String[] list =new String[]{Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT};

        requestPermissions(list, Constants.PERMISSION_REQUEST_SCAN);

    }

}

3.为什么闪退


Google Play / Android Vitals

先完成1,2两步, 然后再去做各种蓝牙有关的操作,不然在Android 12 手机上会直接闪退!!

在EnableBluetooth的文档里有这一句

参考链接:

https://stackoverflow.com/questions/67722950/android-12-new-bluetooth-permissions

https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#assert-never-for-location

你可能感兴趣的:(Android 12 蓝牙权限(解决闪退问题))