Android12蓝牙权限适配说明

Android12蓝牙权限适配说明

根据google官方资料,Android 12(API 31) 引入了 BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE 和 BLUETOOTH_CONNECT 权限,可让您的应用扫描附近的设备,而无需请求位置权限。这几个权限是运行时权限,用于查找蓝牙设备、使某个设备可被其他设备检测到,或者与已配对的蓝牙设备通信,必须主动申请。

最近正好又在做蓝牙相关的项目,发现网上的一些资料并不够全面,特整理此文。

权限声明

在Android 6-11的机型上如果使用蓝牙搜索设备,仍然需要请求定位权限和以前的蓝牙权限BLUETOOTH、BLUETOOTH_ADMIN,那么如何声明权限呢?在清单文件中可以使用android:maxSdkVersion="30"限定需要申请权限的Android版本,这样在Android 12及以上机型上,应用详情中的权限列表将不会列出这些权限。如果应用中除蓝牙外其他功能还需要使用定位权限,请勿针对ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION这两个权限添加android:maxSdkVersion限制。

android:name="android.permission.ACCESS_COARSE_LOCATION"

android:maxSdkVersion="30" />

android:name="android.permission.ACCESS_FINE_LOCATION"

android:maxSdkVersion="30" />

android:name="android.permission.BLUETOOTH"

android:maxSdkVersion="30" />

android:name="android.permission.BLUETOOTH_ADMIN"

android:maxSdkVersion="30" />

android:name="android.permission.BLUETOOTH_SCAN"

android:usesPermissionFlags="neverForLocation"

tools:targetApi="s" />

特别需要注意的是,Android 12及以上机型,如果想不申请定位权限就能搜索到设备,必须在BLUETOOTH_SCAN权限上加上android:usesPermissionFlags="neverForLocation",否则仍需申请定位权限。

申请权限

private final int REQUEST_PERMISSION_CODE = 1001;

private void initPermission() {

List mPermissionList = new ArrayList<>();

// Android 版本大于等于 12 时,申请新的蓝牙权限

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

mPermissionList.add(Manifest.permission.BLUETOOTH_SCAN);

mPermissionList.add(Manifest.permission.BLUETOOTH_ADVERTISE);

mPermissionList.add(Manifest.permission.BLUETOOTH_CONNECT);

//根据实际需要申请定位权限

//mPermissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);

//mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);

} else {

mPermissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);

mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);

}

ActivityCompat.requestPermissions(this, mPermissionList.toArray(new String[0]), REQUEST_PERMISSION_CODE);

}

参考资料

Android 12 中的新蓝牙权限 | Android Developers

https://developer.android.google.cn/about/versions/12/features/bluetooth-permissions

对蓝牙通讯感兴趣的朋友可以看看我的这个项目

BluetoothChat_one2more: 一对多蓝牙连接示例,基于Google BluetoothChat修改,实现一对多聊天(一个服务端、多个客户端),类似聊天室。

https://github.com/fly263/BluetoothChat_one2more

相关数据

微博怎么添加好友?最详细的加人教程来了!
365bet网投官网

微博怎么添加好友?最详细的加人教程来了!

⌛ 07-10 👁️‍🗨️ 7164
北京车之家信息有限公司营业执照
email365

北京车之家信息有限公司营业执照

⌛ 10-13 👁️‍🗨️ 8540
外型古怪内心香甜  思念中的沙巴果
365bet网投官网

外型古怪内心香甜 思念中的沙巴果

⌛ 09-20 👁️‍🗨️ 5986
苹果耳机音质达到什么水平?
bte365娱乐线

苹果耳机音质达到什么水平?

⌛ 09-14 👁️‍🗨️ 7761
PokeRogue Dex:属性:空
email365

PokeRogue Dex:属性:空

⌛ 09-30 👁️‍🗨️ 2501