当前位置: 首页 > news >正文

Android 蓝牙学习

在Android中,进行蓝牙设备扫描startDiscovery需要申请位置权限,但有的时候并不需要申请位置权限,就有了android:usesPermissionFlags="neverForLocation",设置这个就不用申请位置权限来进行蓝牙扫描。

android:usesPermissionFlags="neverForLocation" 是 Android 中用于在应用的 AndroidManifest.xml 文件中声明权限使用标志的一个属性。具体来说,这个标志与蓝牙扫描相关联,旨在向用户和系统表明应用程序请求蓝牙权限的目的不是为了进行位置跟踪或获取用户的位置信息。

背景

自 Android 12(API 级别 31)起,Google 引入了更严格的隐私保护措施,其中包括对蓝牙扫描权限的管理。以前,应用程序可能只需要蓝牙权限就能访问蓝牙功能,但这些功能也可能被间接用于推断用户的位置,例如通过蓝牙信标进行室内定位。为增强用户隐私保护,Android 提供了一种机制让开发者明确声明他们的蓝牙扫描活动不会用于位置跟踪。

使用场景

当你开发的应用程序需要执行蓝牙扫描操作,但不打算用此操作来确定用户的位置时,可以使用 android:usesPermissionFlags="neverForLocation" 来声明这一点。这有助于增加用户的信任度,并可能简化权限请求流程,因为在这种情况下,应用不需要请求位置相关的权限。

如何使用

要在你的应用中声明蓝牙权限且不用于位置跟踪,可以在 AndroidManifest.xml 文件中的 <uses-permission> 标签内添加 android:usesPermissionFlags 属性。例如:

 

xml

深色版本

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.bluetoothapp"><uses-permission android:name="android.permission.BLUETOOTH_SCAN"android:usesPermissionFlags="neverForLocation"/><!-- 其他配置 -->
</manifest>

在这个例子中,BLUETOOTH_SCAN 权限被声明为“永不用于位置”,这意味着该应用承诺不会利用蓝牙扫描的结果来进行位置跟踪。

注意事项

  • 权限请求:即使指定了 neverForLocation 标志,如果您的应用还需要其他涉及位置数据的功能,则仍需请求相应的位置权限。
  • 用户体验:明确声明蓝牙权限不用于位置跟踪可以帮助提高用户的信任感,因为它清楚地传达了应用收集数据的目的。
  • 兼容性android:usesPermissionFlags="neverForLocation" 只适用于 Android 12 及以上版本。对于较低版本的 Android 系统,您需要确保应用的行为符合当时的权限模型要求。

总结

android:usesPermissionFlags="neverForLocation" 是一个重要的隐私保护特性,允许开发者更加透明地向用户展示他们如何使用蓝牙权限。这对于那些确实不需要位置信息的应用程序来说是一个很好的工具,可以帮助减少不必要的权限请求,并提升用户对应用的信任度。然而,开发者应确保遵守这一声明的实际含义,在应用逻辑中避免使用蓝牙扫描结果进行任何形式的位置跟踪。

参考:

【android bluetooth 协议分析 03】【蓝牙扫描详解 2】【app触发蓝牙扫描后,协议栈都做了那些事情】_android 经典蓝牙扫描流程源码分析-CSDN博客

《Android学习笔记》Android12蓝牙扫描不到设备的权限问题_android:usespermissionflags="neverforlocation-CSDN博客

http://www.lryc.cn/news/600830.html

相关文章:

  • 如何检查服务器数据盘是否挂载成功?
  • Flowable 实战落地核心:选型决策与坑点破解
  • ACO-OFDM 的**频带利用率**(单位:bit/s/Hz)计算公式
  • 【深度学习新浪潮】什么是GUI Agent?
  • java网络请求工具类HttpUtils
  • QUIC协议如何在UDP基础上解决网络切换问题
  • [C/C++内存安全]_[中级]_[再次探讨避免悬垂指针的方法和检测空指针的方法]
  • 蘑菇云路由器使用教程
  • 无需云服务器的内网穿透方案 -- cloudflare tunnel
  • 计数dp(基础)
  • Redis 缓存机制详解:原理、问题与最佳实践
  • Java程序员学从0学AI(六)
  • MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
  • 【LeetCode刷题指南】--队列实现栈,栈实现队列
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • mysql group by 多个行转换为一个字段
  • 数据结构(4)单链表算法题(上)
  • 图解网络-小林coding笔记(持续更新)
  • 期货资管软件定制开发流程
  • write`系统调用
  • 宝塔面板如何升级OpenSSL
  • 哈尔滨←→南昌的铁路要道
  • IC测试之pogo pin学习与总结-20250726
  • 鲲鹏服务器部署Kafka2.8.1
  • 微服务springcloud http客户端feign
  • 【资讯】2025年软件行业发展趋势:AI驱动变革,云原生与安全成核心
  • 【Spring Cloud】微服务学习
  • LeetCode——1717. 删除子字符串的最大得分
  • 秋招Day20 - 微服务 - 概念
  • 【机器学习深度学习】模型微调:多久才算微调完成?——如何判断微调收敛,何时终止训练