SDK_APP/蓝牙权限配置指南.md

4.7 KiB
Raw Blame History

蓝牙权限配置完整指南

📋 权限配置概述

本应用已配置完整的蓝牙权限支持,包括:

  • Android 11及以下:需要位置权限进行蓝牙扫描
  • Android 12+:使用新的蓝牙权限模型,无需位置权限

🔧 AndroidManifest.xml 配置

基础蓝牙权限

<!-- 基础蓝牙权限 (Android 11及以下) -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- Android 12+ 新蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

位置权限仅Android 11及以下需要

<!-- 位置权限 (Android 11及以下需要) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" 
                 android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" 
                 android:maxSdkVersion="30" />

Android 12+ 特殊配置

<!-- Android 12+ 蓝牙扫描权限 (不用于定位) -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                 android:usesPermissionFlags="neverForLocation" />

📱 运行时权限请求

动态权限检查

应用会根据Android版本自动确定所需权限

// Android 12+ 使用新的蓝牙权限
private val REQUIRED_PERMISSIONS: Array<String> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    arrayOf(
        Manifest.permission.BLUETOOTH_SCAN,
        Manifest.permission.BLUETOOTH_CONNECT
    )
} else {
    // Android 11及以下需要位置权限
    arrayOf(
        Manifest.permission.BLUETOOTH_SCAN,
        Manifest.permission.BLUETOOTH_CONNECT,
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
}

权限状态显示

应用会显示详细的权限状态:

  • 已授予权限
  • 缺少权限
  • 💡 权限请求提示

🔍 权限检查流程

1. 应用启动时检查

  • 显示当前权限状态
  • 提示用户授予必要权限

2. 蓝牙操作前检查

  • 自动检查所需权限
  • 如果缺少权限,自动请求
  • 显示权限请求结果

3. 权限结果处理

  • 显示已授予和被拒绝的权限
  • 提供手动设置指导
  • 根据权限状态决定是否继续操作

🚨 常见权限问题

1. 权限被拒绝

症状: 扫描无结果,显示"权限被拒绝" 解决方案:

  1. 进入应用设置 → 权限
  2. 手动开启蓝牙和位置权限
  3. 重启应用

2. Android 12+ 权限问题

症状: 新设备上扫描失败 解决方案:

  1. 确保使用新的蓝牙权限
  2. 检查neverForLocation标志
  3. 确认权限已正确授予

3. 位置权限问题

症状: Android 11及以下设备扫描失败 解决方案:

  1. 确保位置权限已授予
  2. 检查GPS是否开启某些厂商系统需要
  3. 重启蓝牙服务

📊 权限状态检查

应用内权限状态显示

权限状态:
BLUETOOTH_SCAN: ✓
BLUETOOTH_CONNECT: ✓
ACCESS_FINE_LOCATION: ✓
ACCESS_COARSE_LOCATION: ✓

系统设置检查

  1. 设置 → 应用 → 本应用 → 权限
  2. 设置 → 隐私 → 位置信息
  3. 设置 → 蓝牙

🛠️ 调试权限问题

1. 检查权限声明

# 确认AndroidManifest.xml中的权限声明正确
# 检查maxSdkVersion和usesPermissionFlags

2. 检查运行时权限

// 在代码中检查权限状态
ContextCompat.checkSelfPermission(context, permission)

3. 查看权限请求结果

// 在onRequestPermissionsResult中处理结果
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray)

📝 权限配置清单

AndroidManifest.xml 检查项

  • 基础蓝牙权限已声明
  • Android 12+ 新权限已声明
  • 位置权限限制到Android 11及以下
  • neverForLocation标志已设置
  • 蓝牙功能特性已声明

代码权限检查项

  • 动态权限检查已实现
  • 权限请求已处理
  • 权限结果已处理
  • 权限状态显示已实现

测试检查项

  • Android 11及以下设备测试通过
  • Android 12+ 设备测试通过
  • 权限拒绝场景测试通过
  • 权限授予后功能正常

🎯 针对目标设备的权限检查

目标设备: A4:C3:37:86:9F:73

  1. 确认设备Android版本
  2. 检查对应权限是否已授予
  3. 验证权限配置是否正确
  4. 测试扫描功能是否正常

🚀 下一步操作

  1. 重新编译应用
  2. 在目标设备上测试权限
  3. 确认权限授予后扫描正常
  4. 如果仍有问题,检查设备特定设置