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

Android 13三星SM-G998U设备getBondedDevices()无法获取已配对蓝牙设备

问题原因分析及解决方案

核心问题:权限检查逻辑错误

你的代码中checkBluetoothPermission函数的权限判断逻辑存在错误,这是导致Android 13三星设备无法获取配对设备的主要原因:

  • 在Android 13(API 33+)中,获取已配对蓝牙设备必须持有BLUETOOTH_CONNECT权限,但你的函数在权限未授予时,错误地返回Build.VERSION.SDK_INT < Build.VERSION_CODES.S(即Android 13+设备权限未授予时返回false)。
  • 同时getBondedDevices中的判断条件!checkBluetoothPermission(mContext) && !isBluetoothEnabled意味着:即使权限未授予但蓝牙已开启,代码仍会执行获取配对设备的逻辑。而Android 13+系统在没有BLUETOOTH_CONNECT权限时,调用bondedDevices会直接返回空列表。

此外,部分三星Android 13设备对蓝牙权限的管控更严格,权限生效可能存在延迟,或需要用户在应用信息中确认权限的具体使用范围。缓存导致的概率极低,但也可作为后续排查方向。

修复步骤

1. 修正权限检查逻辑

重写权限判断函数,正确匹配不同Android版本的权限要求:

fun checkBluetoothPermission(context: Context): Boolean {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        // Android 13+ 仅需检查 BLUETOOTH_CONNECT 权限
        ActivityCompat.checkSelfPermission(
            context,
            Manifest.permission.BLUETOOTH_CONNECT
        ) == PackageManager.PERMISSION_GRANTED
    } else {
        // Android 12及以下,检查旧版蓝牙权限
        ActivityCompat.checkSelfPermission(
            context,
            Manifest.permission.BLUETOOTH
        ) == PackageManager.PERMISSION_GRANTED
    }
}

同时修改getBondedDevices的判断逻辑,只要权限不满足或蓝牙未开启,就直接返回:

fun getBondedDevices(){                                                             
    if (!checkBluetoothPermission(mContext) || !isBluetoothEnabled) {
        return
    }

    val bondedDevice = mBluetoothAdapter?.bondedDevices
    // 可添加日志输出,确认设备列表情况
    // Log.d("Bluetooth", "Bonded devices count: ${bondedDevice?.size ?: 0}")
}

2. 确保权限声明与动态申请正确

在AndroidManifest.xml中添加对应权限声明:

<!-- Android 13+ 蓝牙连接权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Android 12及以下蓝牙权限,限制仅在旧版本生效 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="32" />

在应用运行时,针对Android 13+设备动态申请BLUETOOTH_CONNECT权限,确保用户授予权限后再执行获取配对设备的逻辑。

3. 排查缓存/系统问题(权限正常后仍异常时)

  • 清除应用缓存:进入设备设置 → 应用管理 → 你的应用 → 存储 → 清除缓存。
  • 重启设备,或在蓝牙设置中取消配对目标设备后重新配对,再尝试获取列表。

内容的提问来源于stack exchange,提问作者Maradiya Krupa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:17:48