[英]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.