我使用 API 来构建广告数据包。我将 true
传递给 setIncludeDeviceName
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.setIncludeTxPowerLevel(false)
.addServiceUuid(new ParcelUuid(TimeProfile.TIME_SERVICE))
.build();
API 对广告数据包中的设备型号进行编码。然而,对于我的应用程序,广告数据包的设备名称应该来自硬编码到应用程序中的字符串
private static final String DEVICE_NAME = "My_Device_Name";
有没有办法自定义广告包中的设备名称?我在 AdvertiseData 的文档中没有看到任何方法可以做到这一点或 AdvertiseData.Builder
最佳答案
您必须从您的数据 AdvertiseData 中删除“setIncludeDeviceName” 对象并定义扫描响应 AdvertiseData 对象
AdvertiseData scanResponse = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.build();
然后也使用 scanResponse 开始广告
bluetoothAdapter.getBluetoothLeAdvertiser()
.startAdvertising(advSettings, data, scanResponse, advCallback);
完整示例:
AdvertiseSettings advSettings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.setConnectable(true)
.build();
AdvertiseData advData = new AdvertiseData.Builder()
.setIncludeTxPowerLevel(true)
.addServiceUuid(mCurrentServiceFragment.getServiceUUID())
.build();
AdvertiseData advScanResponse = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.build();
AdvertiseCallback advCallback = new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
Log.e(TAG, "Not broadcasting: " + errorCode);
int statusText;
switch (errorCode) {
case ADVERTISE_FAILED_ALREADY_STARTED:
Log.w(TAG, "ADVERTISE_FAILED_ALREADY_STARTED");
break;
case ADVERTISE_FAILED_DATA_TOO_LARGE:
Log.w(TAG, "ADVERTISE_FAILED_DATA_TOO_LARGE");
break;
case ADVERTISE_FAILED_FEATURE_UNSUPPORTED:
Log.w(TAG, "ADVERTISE_FAILED_FEATURE_UNSUPPORTED");
break;
case ADVERTISE_FAILED_INTERNAL_ERROR:
Log.w(TAG, "ADVERTISE_FAILED_INTERNAL_ERROR");
break;
case ADVERTISE_FAILED_TOO_MANY_ADVERTISERS:
Log.w(TAG, "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS");
break;
default:
Log.wtf(TAG, "Unhandled error: " + errorCode);
}
}
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
Log.v(TAG, "Advertising started");
}
};
bluetoothAdapter.getBluetoothLeAdvertiser()
.startAdvertising(advSettings, advData, advScanResponse, advCallback);
关于android - 如何设置 BLE 通告数据包的设备名称字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229859/