繁体   English   中英

有什么方法可以在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 可以做到这一点。 安卓可以吗?

或者,有什么方法可以更改显示的设备名称? 比如如何在广告数据中设置设备名称?

设备名称存储在 BluetoothAdapter 中。 您可以使用以下方法进行设置:

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

一种方法是将设备名称更改为较短的名称(不会使数据包超过 31 个字节),如上面的答案所述。 例如“Pixel 3”很好,但“Xperia Premium”太长。 检查https://stackoverflow.com/a/57759036/11194589以供参考。

另一种解决方案是从主广告数据包中删除设备名称,并将其放入https://stackoverflow.com/a/49631117/11194589 中提到的扫描响应中。

kotlin 中的类似内容(不包括广告回调):

    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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM