You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13调用蓝牙启用Intent触发SecurityException权限问题咨询

Android 13 发送蓝牙启用Intent时权限崩溃问题

问题描述

我们的应用通过发送Intent(android.bluetooth.adapter.action.REQUEST_ENABLE)来启用蓝牙,但在Android 13(SDK 33)设备上触发SecurityException,提示缺少android.permission.BLUETOOTH权限。根据官方文档,该权限仅要求到SDK 30,SDK 33及以上应使用BLUETOOTH_CONNECT权限,且我们已对BLUETOOTH_CONNECT权限完成校验。

崩溃日志

Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.bluetooth.adapter.action.REQUEST_ENABLE cmp=com.android.settings/.bluetooth.RequestPermissionActivity } from ProcessRecord{5756fe6 13572:com.u.a/u0a277} (pid=13572, uid=10277) requires android.permission.BLUETOOTH
       at android.os.Parcel.createExceptionOrNull(Parcel.java:3011)
       at android.os.Parcel.createException(Parcel.java:2995)
       at android.os.Parcel.readException(Parcel.java:2978)
       at android.os.Parcel.readException(Parcel.java:2920)
       at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2327)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:2114)
       at android.app.Activity.startActivityForResult(Activity.java:5612)
       at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:728)
       at android.app.Activity.startActivityForResult(Activity.java:5565)
       at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:709)
       at com.u.a.r.FlowActivity.promptBluetoothPermissions(FlowActivity.java:223)
       at com.u.a.r.FlowActivity.onStart(FlowActivity.java:158)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1679)
       at android.app.Activity.performStart(Activity.java:8471)
       at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4125)
       at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
       at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2506)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:242)
       at android.os.Looper.loop(Looper.java:374)
       at android.app.ActivityThread.main(ActivityThread.java:8911)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:671)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:951)

解决方案

部分Android 13设备的系统设置组件在处理REQUEST_ENABLE Intent时,仍会检查BLUETOOTH权限,即使官方文档说明SDK 33及以上无需该权限。解决方法如下:

  1. 在Manifest中添加带版本限制的BLUETOOTH权限声明
    在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

添加maxSdkVersion="30"后,该权限仅在Android 11及以下系统生效,高版本系统会自动忽略,不会影响权限合规性。

  1. 确保BLUETOOTH_CONNECT权限已正确申请
    针对SDK 31及以上设备,启动蓝牙Intent前必须先申请并获取BLUETOOTH_CONNECT权限,校验逻辑保持不变。

内容的提问来源于stack exchange,提问作者Arka Prava Basu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:13:23