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

有没有办法在android BLE中更改AdvertiseData中的设备名称?,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,创建AdvertiseData对象时,如果在数据包中同时添加设备名称和服务uuid,则该对象将失败,因为它大于AdvertiseData限制的最大大小。是否有任何方法可以在播发数据中同时包含设备名称和服务uuid?我知道iOS可以做到这一点。安卓能做到吗 或者,有没有办法更改显示的设备名称?如如何在播发数据中设置设备名称?设备名称存储在BluetoothAdapter中。您可以使用以下方法进行设置: boolean isNameChanged=BluetoothAdapter.getDefaul

创建AdvertiseData对象时,如果在数据包中同时添加设备名称和服务uuid,则该对象将失败,因为它大于AdvertiseData限制的最大大小。是否有任何方法可以在播发数据中同时包含设备名称和服务uuid?我知道iOS可以做到这一点。安卓能做到吗


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

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


boolean isNameChanged=BluetoothAdapter.getDefaultAdapter().setName(“myDeviceName”)

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


boolean isNameChanged=BluetoothAdapter.getDefaultAdapter().setName(“myDeviceName”)

一种方法是将设备名称更改为较短的名称(这不会使数据包超过31字节),如上面的答案所述。例如,“像素3”很好,但“Xperia Premium”太长。 查阅参考资料

另一种解决方案是从主广告包中删除设备名称,并将其放入扫描响应中,如中所述

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


一种方法是将设备名称更改为较短的名称(这不会使数据包超过31字节),如上面的答案所述。例如,“像素3”很好,但“Xperia Premium”太长。 查阅参考资料

另一种解决方案是从主广告包中删除设备名称,并将其放入扫描响应中,如中所述

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


这会全局更改设备上的蓝牙设置名称,而不是专门更改BLE广告数据名称。因此,如果我决定进行文件传输,那么名称现在也将显示“myDeviceName”。这不方便。这会全局更改设备上的蓝牙设置名称,而不是专门更改BLE广告数据名称。因此,如果我决定进行文件传输,那么名称现在也将显示“myDeviceName”。这不方便。
    AdvertiseData advertiseData = new AdvertiseData.Builder()
            .setIncludeDeviceName( true )
            .addServiceUuid( uuid )
            .build();
    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")