首页 > 其他分享 >Android12申请蓝牙权限说明

Android12申请蓝牙权限说明

时间:2022-09-21 14:45:11浏览次数:90  
标签:Android12 蓝牙 BLUETOOTH add Android 权限 mPermissionList

根据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 12以下才需要定位权限, Android 9以下官方建议申请ACCESS_COARSE_LOCATION -->
    <uses-permission
        android:name="android.permission.ACCESS_COARSE_LOCATION"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.BLUETOOTH"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.BLUETOOTH_ADMIN"
        android:maxSdkVersion="30" />
    <!-- Android 12在不申请定位权限时,必须加上android:usesPermissionFlags="neverForLocation",否则搜不到设备 -->
    <uses-permission
        android:name="android.permission.BLUETOOTH_SCAN"
        android:usesPermissionFlags="neverForLocation"
        tools:targetApi="s" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

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

申请权限

    private final int REQUEST_PERMISSION_CODE = 1001;

    private void initPermission() {
        List<String> 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

标签:Android12,蓝牙,BLUETOOTH,add,Android,权限,mPermissionList
From: https://www.cnblogs.com/fly263/p/16715525.html

相关文章

  • LiveNVR监控流媒体Onvif/RTSP功能-如何配置播放回调鉴权集成业务自身的权限系统视频流
    @目录1、准备回调鉴权接口2、配置回调鉴权地址3、调试说明3.1、调试环境3.2、调用示例3.2.1、视频流地址3.2.2、附加鉴权参数3.2.3、播放器播放3.2.4、回调请求鉴权3.2.4.1......
  • oracle权限类型大全
    ListingsofSystemandObjectPrivilegesSystemPrivilegeNameOperationsAuthorizedAdvisorFrameworkPrivileges: Alloftheadvisorframeworkprivilege......
  • MySQL 添加用户并授予只能查询权限
    1.创建用户createuser'userName'@'%'identifiedby'123456';用户名为userName,密码是123456的用户(userName,123456可指定)2.授予权限grantselectonmysql.*to'use......
  • bat cmd批处理命令获取管理员权限&停止、启动windows服务
    获取管理员权限@echooff>nul2>&1"%SYSTEMROOT%\system32\cacls.exe""%SYSTEMROOT%\system32\config\system"if'%errorlevel%'NEQ'0'(echorunasadministrat......
  • 【MySQL】MySQL导出用户权限信息
    $vimMyDatabaseUSers.sql#!/bin/bashGRANT_CMDS=/tmp/ShowGrantsToExport.sqlGRANT_FILE=MyDatabaseUSers.sqlMYSQL_USER=rootMYSQL_PASS=rootMYSQL_CONN="-u${MY......
  • 系统权限的反思
    一、系统权限设计现状  目前大部分的应用系统,包含销售管理系统在内,系统权限的设计方案均采用的是RBAC模型,所谓RBAC就是:用户、角色、系统功能,用户属于某些角色、角色拥......
  • MongoDB 用户与权限
    1、创建查询role:custom_role,对dbidap_zl下的collection:tab1、tab2只有查询权限1)使用trs用户登录数据库2)切换到db:idap_zl创建role,替换示例中的collection,如果......
  • 若依(RuoYi )权限管理设计
    前言若依权限管理包含两个部分:菜单权限和数据权限。菜单权限控制着我们可以执行哪些操作。数据权限控制着我们可以看到哪些数据。菜单是一个概括性名称,可以细分为目录......
  • GB28181国标视频监控平台LiveGBS用户自定义播放回调鉴权,允许用户按照自己的业务逻辑控
    GB28181流媒体平台LiveGBS中有是否需要用户登录认证才可播放视频的选项控制。但是很多情况不能满足实际项目使用场景中对播放权限的控制,允许谁播不允许谁播等可能有更详细......
  • uniapp蓝牙多设备连接
    博客园断更快一年了终于想起来我还有个博客,也主要是最近工作上面也没有什么想记录的,不过最近倒是搞了个有意思的功能项目 请注意:此文章禁止转载,抄袭,这是对我个人知识产......