有没有办法在android BLE中更改AdvertiseData中的设备名称?

时间:2016-04-25 15:53:06

标签: android bluetooth-lowenergy

<% @event.organizers.each do |organizer| %>
  <%= organizer.name %>
<% end %>

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

或者,有没有办法更改显示的设备名称?喜欢如何在广告数据中设置设备名称?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

在Kotlin中这样的事情(不包括AdvertiseCallback):

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