近期遇到一个问题,之前发布的APP连接蓝牙都是正常的,现在有人反映连不上了。经过测试发现android 12 和 harmonyOS 3.0.0 都会有这个问题,而之前的版本就不会有这个

        经过网上一番查找,原来是因为最近Google发布的Android 12,新引入BLUETOOTH_SCAN、BLUETOOTH_CONNECT、BLUETOOTH_ADVERTISE 三个权限。、

        从Android 12开始,过去的蓝牙权限拆分成了3个新的权限,并且全都是运行权限需要动态申请):

        这3个权限都是从Android 12系统才开始有的,所以为了能够兼容过去的老版本建议在AndroidManifest.xml中这样声明

    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"  android:maxSdkVersion="30"/>
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /&gt;

        新增的3个蓝牙权限都是运行时权限,因此只在AndroidManifest.xml声明没有用的,还要在代码中动态申请权限才行。必须先在应用用户明确批准使用然后才能查找蓝牙设备、使某个设备可被其他设备检测到,或者与已配对的蓝牙设备通信

        具体的申请方法如下:首先要判断当前系统版本,只有当Android 12及以上系统,才应该请求新增的蓝牙权限。(PS:3个权限都属于一个权限组,因此理论上只要申请一个权限,另外2个也就自动授权了。)

if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {
            String[] permission = checkSelfPermissionArray(this, new String[]{
                    Manifest.permission.BLUETOOTH_SCAN,
                    Manifest.permission.BLUETOOTH_ADVERTISE,
                    Manifest.permission.BLUETOOTH_CONNECT});
            if (permission.length &gt; 0) {
                ActivityCompat.requestPermissions(this, permission, 102);
            }
        }

注意:

之前的Android系统中有一个很奇怪的现象,当我们应用使用蓝牙扫描附件设备的时候需要申请地理位置权限蓝牙权限并不是运行时权限,但地理位置权限却是

原文地址:https://blog.csdn.net/minusn/article/details/128660803

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_32074.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注