有什么方法可以更改 android BLE 中 AdvertiseData 中的设备名称?

Is there any way to change the device name in AdvertiseData in android BLE?

    AdvertiseData advertiseData = new AdvertiseData.Builder()
            .setIncludeDeviceName( true )
            .addServiceUuid( uuid )
            .build();

创建 AdvertiseData 对象时,如果您在数据包中同时添加设备名称和服务 uuid,则会失败,因为它大于 AdvertiseData 限制的最大大小。有什么方法可以在广告数据中同时包含设备名称和服务 uuid 吗?我知道 iOS 可以做到这一点。 android可以吗?

或者,有什么办法可以改变显示的设备名称吗?比如如何在advertise data中设置设备名称?

设备名称存储在蓝牙适配器中。您可以使用以下设置:

boolean isNameChanged = BluetoothAdapter.getDefaultAdapter().setName("myDeviceName");

一种方法是将设备名称更改为较短的名称(不会使数据包超过 31 字节),如上面的答案所述。例如“Pixel 3”没问题,但“Xperia Premium”太长了。 检查 以供参考。

另一种解决方案是从主广告数据包中删除设备名称并将其放入中提到的扫描响应中。

kotlin 中的类似内容(不包括 advertisementCallback):

    val bluetoothLeAdvertiser: BluetoothLeAdvertiser? =
            bluetoothManager.adapter.bluetoothLeAdvertiser

    bluetoothLeAdvertiser?.let {bluetoothAdvertiser ->
        val settings = AdvertiseSettings.Builder()
                .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
                .setConnectable(true)
                .setTimeout(0)
                .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
                .build()

        val data = AdvertiseData.Builder()
                .setIncludeTxPowerLevel(false)
                .addServiceUuid(ParcelUuid(MY_SERVICE_UUID))
                .build()

        val scanResponse = AdvertiseData.Builder()
                .setIncludeDeviceName(true)
                .build()

        bluetoothAdvertiser.startAdvertising(settings, data, scanResponse, advertisementCallback)

    } ?: Timber.w("Failed to create advertiser")