如何向 Alte Beacon 添加额外数据
How can I add extra data to Alte Beacon
我正在使用 AlteBeacon 库构建一个信标,创建时没问题,但我想添加额外的数据,但我不知道该怎么做。例如我想在我的新信标中注册产品名称和价格。
public class Tab1Register extends Fragment {
private BluetoothAdapter blVer;
private TextView device;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1reg, container, false);
device = rootView.findViewById(R.id.device);
blVer = BluetoothAdapter.getDefaultAdapter();
boolean le2MPhySupported;
//device.setText("hola");
if (Build.VERSION.SDK_INT >= 21) {
// Call some material design APIs here
device.setText("supported");
Beacon beacon = new Beacon.Builder()
.setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
.setId2("1")
.setId3("2")
.setManufacturer(0x0118)
.setTxPower(-59)
.setDataFields(Arrays.asList(new Long[] {0l}))
.setBluetoothName("Paulo")
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getActivity(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
} else {
// Implement this feature without material design
device.setText("Not supported");
}
return rootView;
}
了解 BLE 广告中的数据有限 space。每种信标格式都有不同数量的可用数据字节。对于 iBeacon,数字是 0 个字节,对于 Eddystone-UID,数字是 2 个字节,对于 AltBeacon,数字是 1 个字节。
问题中显示的代码已经将这一个字节的数据添加到广告中,并赋予其值为 0。例如,如果要将值更改为 255,请将代码更改为:
.setDataFields(Arrays.asList(new Long[] {255l}))
不要让 setDataFields 方法中的数据类型采用 Long 数组这一事实让您感到困惑。由于此信标格式的单个数据字段中只有一个字节可用,因此您不能在数据字段中存储整个 long 值(即 8 个字节)。该值必须在 0-255 之间。
我正在使用 AlteBeacon 库构建一个信标,创建时没问题,但我想添加额外的数据,但我不知道该怎么做。例如我想在我的新信标中注册产品名称和价格。
public class Tab1Register extends Fragment {
private BluetoothAdapter blVer;
private TextView device;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1reg, container, false);
device = rootView.findViewById(R.id.device);
blVer = BluetoothAdapter.getDefaultAdapter();
boolean le2MPhySupported;
//device.setText("hola");
if (Build.VERSION.SDK_INT >= 21) {
// Call some material design APIs here
device.setText("supported");
Beacon beacon = new Beacon.Builder()
.setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
.setId2("1")
.setId3("2")
.setManufacturer(0x0118)
.setTxPower(-59)
.setDataFields(Arrays.asList(new Long[] {0l}))
.setBluetoothName("Paulo")
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getActivity(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
} else {
// Implement this feature without material design
device.setText("Not supported");
}
return rootView;
}
了解 BLE 广告中的数据有限 space。每种信标格式都有不同数量的可用数据字节。对于 iBeacon,数字是 0 个字节,对于 Eddystone-UID,数字是 2 个字节,对于 AltBeacon,数字是 1 个字节。
问题中显示的代码已经将这一个字节的数据添加到广告中,并赋予其值为 0。例如,如果要将值更改为 255,请将代码更改为:
.setDataFields(Arrays.asList(new Long[] {255l}))
不要让 setDataFields 方法中的数据类型采用 Long 数组这一事实让您感到困惑。由于此信标格式的单个数据字段中只有一个字节可用,因此您不能在数据字段中存储整个 long 值(即 8 个字节)。该值必须在 0-255 之间。