簡體   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