我正在用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;
}
答案 0 :(得分:0)
了解BLE广告中的数据空间有限。每种信标格式具有不同数量的可用数据字节。对于iBeacon,数字为0字节,对于Eddystone-UID,数字为2字节,对于AltBeacon,则为1字节。
问题中显示的代码已经将这一个字节的数据添加到广告中,使其值为0.例如,如果要将值更改为255,请将代码更改为:
.setDataFields(Arrays.asList(new Long[] {255l}))
不要让setDataFields方法中的数据类型采用Long数组这一事实让您感到困惑。由于此信标格式的单个数据字段中只有一个字节可用,因此无法在数据字段中存储整个长值(即8个字节)。该值必须介于0-255之间。