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

Android Kotlin中获取蓝牙配对设备名称:d.getName()无法使用如何解决?

解决Kotlin中获取蓝牙配对设备名称的问题

Hey,我来帮你搞定这个问题!你的代码里其实藏着两个小问题,咱们一步步来解决:

首先,修正遍历配对设备的错误

你写的for (d in listOfNotNull(pairedDevices))这里有问题——pairedDevices本身是Set<BluetoothDevice>?类型,listOfNotNull会把整个Set当成单个元素放进列表里,所以循环里的d其实是个集合,根本不是单个蓝牙设备,自然调用不了getName()方法啦!

正确的遍历方式应该是直接遍历pairedDevices这个集合(先判断它不为null)。

然后,正确获取设备名称

另外,从Android 12(API 31)开始,BluetoothDevice.getName()方法已经被弃用了,Kotlin里更推荐用属性访问device.name,而且还要注意权限问题:

1. 确保权限配置

在你的AndroidManifest.xml里添加对应权限:

<!-- Android 11及以下版本需要的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />

<!-- Android 12+必须的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

注意:Android 12+的BLUETOOTH_CONNECT是危险权限,需要在运行时动态申请,不能只在Manifest里声明哦!

2. 修正后的完整代码

// 获取配对设备集合
val pairedDevices = mBluetoothAdapter?.bondedDevices

// 遍历每个设备,添加名称到blueArray
pairedDevices?.forEach { device ->
    // 处理名称可能为null的情况(比如权限不足)
    val deviceName = device.name ?: "未知设备"
    blueArray?.add(deviceName)
}

或者用你习惯的for循环写法:

if (pairedDevices != null) {
    for (device in pairedDevices) {
        val deviceName = device.name ?: "未知设备"
        blueArray?.add(deviceName)
    }
}

为什么之前的getName()不行?

  • 除了遍历错误外,Android 12+如果没有BLUETOOTH_CONNECT权限,调用getName()或者访问name属性都会返回null;
  • Kotlin里更推荐使用属性访问(device.name)而不是Java风格的getter方法,这也是官方推荐的写法。

内容的提问来源于stack exchange,提问作者Rishabh sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:26:33