I have the below code used for transmitting iBeacon from an Android app.
Beacon beacon = new Beacon.Builder()
.setId1("6fb0e0e9-2ae6-49d3-bba3-3cb7698c77e2")
.setId2(Integer.toString(minor1))
.setId3(Integer.toString(minor2))
.setManufacturer(0x0000)
.setTxPower(-59)
.setDataFields(Arrays.asList(new Long[] {0l}))
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
}
});
Would it be possible for me to get the transmitted data in packets?How do i get those data? Thanks!
If you simply want to get the bytes of the packet to be transmitted, you can do so like this:
Using the code above, the array of bytes will look like this:
Note that this byte array isn't the full packet that is transmitted over the air, just the manufacturer data part of it. The packet transmitted over the air is prefixed with a PDU type byte and a length byte, and is also prefixed with a flags PDU. These prefixes, however, are the same for every packet transmitted, and are added automatically by Androids BLE transmission APIs, so they are not included in the bytes returned by
getBeaconAdvertisementData()
.Assuming that you are going to receive the transmitted data on some Android Device, you could use the same library to do that.
This is how the flow would be,