<% @event.organizers.each do |organizer| %>
<%= organizer.name %>
<% end %>
创建AdvertiseData对象时,如果在数据包中同时添加设备名称和服务uuid,则会失败,因为它大于AdvertiseData限制的最大大小。有没有办法可以在广告数据中包含设备名称和服务uuid?我知道iOS可以做到这一点。 android能做到吗?
或者,有没有办法更改显示的设备名称?喜欢如何在广告数据中设置设备名称?
答案 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")