Android 13 (API 33)开发自己的 Settings ,如何配置 WiFi BT 权限

在 Android 13 (API 33) 中,针对WiFi和蓝牙权限有非常严格的 runtime 检查。即使你的应用是系统应用(System App)且配置了 sharedUserId="android.uid.system",如果缺少必要的权限声明或 Priv-app 权限白名单配置 ,依然会抛出 SecurityException

1. AndroidManifest.xml 声明

在 Android 12/13 中,原有的 BLUETOOTHBLUETOOTH_ADMIN 已经不足以支撑扫描和连接。你必须显式声明新的权限:

XML

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:sharedUserId="android.uid.system">

    <uses-permission
        android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- WiFi扫描所需权限 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- Android 13及以上版本需要的WiFi扫描权限 -->
    <uses-permission
        android:name="android.permission.NEARBY_WIFI_DEVICES"
        android:usesPermissionFlags="neverForLocation" />
    <!-- 允许应用程序发现并连接到WiFi网络 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.CONTROL_WIFI" />
    <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
    <uses-permission android:name="android.permission.NETWORK_STACK" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <!-- 蓝牙基本权限 -->
    <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" android:usesPermissionFlags="neverForLocation" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />

</manifest>

注意: 如果你的扫描不涉及地理位置,建议加上 neverForLocation 标志,否则系统可能还会要求你申请 ACCESS_FINE_LOCATION


2. 配置 Priv-app 权限白名单 (关键)

报错显示 uid = 10068,说明这是一个系统级别的 UID。对于预置在 system/priv-appvendor/priv-app 下的应用,必须在 /etc/permissions/ 目录下配置对应的 XML 白名单。

如果你没有配置这个,或者 XML 格式像你上一个问题中提到的那样出现了 Undefined Prefix 错误,系统就会拒绝授予这些权限。

在你的权限配置文件中(例如 com.xxx.settings.xml)添加:

XML

ini 复制代码
<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.xxx.settings">
        <permission name="android.permission.BLUETOOTH_SCAN"/>
        <permission name="android.permission.BLUETOOTH_CONNECT"/>
        <permission name="android.permission.BLUETOOTH_PRIVILEGED"/>
        <permission name="android.permission.MODIFY_PHONE_STATE"/>
        
        <permission name="android.permission.NETWORK_SETTINGS"/>
        <permission name="android.permission.NETWORK_STACK"/>
        <permission name="android.permission.CHANGE_WIFI_STATE"/>
        <permission name="android.permission.TETHER_PRIVILEGED"/>
        <permission name="android.permission.WRITE_SECURE_SETTINGS")
    </privapp-permissions>
</permissions>

配置这些权限后,你的应用就拥有权限特权了,不需要单独申请运行时权限。

相关推荐
李堇13 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly14 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者817 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码203517 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥17 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓17 小时前
[JDBC]元数据
android
独行soc18 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能18 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿18 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc18 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮