Android 灯塔图书馆 | IBeacon - 使用移动设备发布多个信标
Android Beacon Library | IBeacon - Advertising multiple beacons using Mobile device
我正在使用 Android 信标库,
版本 -
compile 'org.altbeacon:android-beacon-library:2.15.1'
我正在尝试开发一个用于从我的移动设备传输多个信标的 APK。
我需要执行此测试或 POC 测试,reader 一次可以读取多少个信标。
我正在使用以下代码通过 Android 信标库传输 BLE 消息。
btn_transmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isBluetoothEnabled)
{
try
{
String customUuid = "";
for(int i=0;i<=50;i++)
{
if( i < 10){
customUuid = "99999999-b00"+i+"-4807-b747-9aee23508620";
} else if ( i < 999){
customUuid = "99999999-b0"+i+"-4807-b747-9aee23508620";
}
Thread.sleep(5000);
trasmitClick(customUuid);
beaconTransmitter = null;
}
}
catch(Exception e)
{
Toast.makeText(BeaconTransmitterActivity.this, "Something went wronggg", Toast.LENGTH_LONG).show();
}
}
else
Toast.makeText(BeaconTransmitterActivity.this, "Check your bluetooth connection", Toast.LENGTH_LONG).show();
}
});
在上面,我动态地尝试创建 50 个新 ID 来传输信标。
创建信标并传输其广告的方法
public void trasmitClick(String customUuid) {
if (beaconTransmitter == null) {
String major, minor, uuid;
uuid = customUuid;
major = etMajorValue.getText().toString().trim();
minor = etMinorValue.getText().toString().trim();
if (TextUtils.isEmpty(uuid))
uuid = customUuid;
if (TextUtils.isEmpty(major))
major = "8";
if (TextUtils.isEmpty(minor))
minor = "2";
currentType=beaconLayout;
currentuuid=uuid;
currentmajorValue=major;
currentminorValue=minor;
beacon = new Beacon.Builder()
.setId1(uuid)
.setId2(major)
.setId3(minor)
//.setManufacturer(0x0118) // It is for AltBeacon. Change this for other beacon layouts
.setManufacturer(0x004C)
.setTxPower(-59)
//.setDataFields(Arrays.asList(new Long[]{6l, 7l})) // Remove this for beacon layouts without d: fields
.build();
// Change the layout below for other beacon types
beaconParser = new BeaconParser()
.setBeaconLayout(parserLayout[beaconLayout]);
beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
}
});
btn_transmit.setText("Stop Advertising");
btn_apply.setEnabled(false);
} else {
beaconTransmitter.startAdvertising();
beaconTransmitter = null;
btn_transmit.setText("Start Advertising");
btn_apply.setEnabled(false);
}
}
我能够使这段代码工作,但结果是我只能传输 4 条消息,其余消息在模拟器中不可见。
我正在尝试查找该库是否有一些限制或者我上面的错误。
嗯,我是 Android 编码的新手。
下面是我在模拟器中得到的结果:
我想知道如何一次性发送50条消息
这肯定是您手机上蓝牙芯片的限制 phone。不同的设备型号有不同的广告限制。例如,华为 P9 Lite 一次只能传输一个广告。 Nexus 5x 可以发布 10 个或更多。许多 phone 型号(如果有的话)不太可能同时支持 50 个广告。
无法以编程方式知道限制,因为 OS 没有提供 API 来查询此限制——您只需要尝试一下。您可以通过将代码放入 onStartFailure
回调中来检查何时收到错误广告。
您也可以使用 [BeaconScope]((https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner) 应用程序对此进行测试。但请记住,传输限制是设备范围内的。如果一个应用程序正在广告信标,则会占用一个广告位来自下一个应用程序。不,没有办法知道其他应用程序是否在投放广告。
我正在使用 Android 信标库, 版本 -
compile 'org.altbeacon:android-beacon-library:2.15.1'
我正在尝试开发一个用于从我的移动设备传输多个信标的 APK。 我需要执行此测试或 POC 测试,reader 一次可以读取多少个信标。
我正在使用以下代码通过 Android 信标库传输 BLE 消息。
btn_transmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isBluetoothEnabled)
{
try
{
String customUuid = "";
for(int i=0;i<=50;i++)
{
if( i < 10){
customUuid = "99999999-b00"+i+"-4807-b747-9aee23508620";
} else if ( i < 999){
customUuid = "99999999-b0"+i+"-4807-b747-9aee23508620";
}
Thread.sleep(5000);
trasmitClick(customUuid);
beaconTransmitter = null;
}
}
catch(Exception e)
{
Toast.makeText(BeaconTransmitterActivity.this, "Something went wronggg", Toast.LENGTH_LONG).show();
}
}
else
Toast.makeText(BeaconTransmitterActivity.this, "Check your bluetooth connection", Toast.LENGTH_LONG).show();
}
});
在上面,我动态地尝试创建 50 个新 ID 来传输信标。
创建信标并传输其广告的方法
public void trasmitClick(String customUuid) {
if (beaconTransmitter == null) {
String major, minor, uuid;
uuid = customUuid;
major = etMajorValue.getText().toString().trim();
minor = etMinorValue.getText().toString().trim();
if (TextUtils.isEmpty(uuid))
uuid = customUuid;
if (TextUtils.isEmpty(major))
major = "8";
if (TextUtils.isEmpty(minor))
minor = "2";
currentType=beaconLayout;
currentuuid=uuid;
currentmajorValue=major;
currentminorValue=minor;
beacon = new Beacon.Builder()
.setId1(uuid)
.setId2(major)
.setId3(minor)
//.setManufacturer(0x0118) // It is for AltBeacon. Change this for other beacon layouts
.setManufacturer(0x004C)
.setTxPower(-59)
//.setDataFields(Arrays.asList(new Long[]{6l, 7l})) // Remove this for beacon layouts without d: fields
.build();
// Change the layout below for other beacon types
beaconParser = new BeaconParser()
.setBeaconLayout(parserLayout[beaconLayout]);
beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
}
});
btn_transmit.setText("Stop Advertising");
btn_apply.setEnabled(false);
} else {
beaconTransmitter.startAdvertising();
beaconTransmitter = null;
btn_transmit.setText("Start Advertising");
btn_apply.setEnabled(false);
}
}
我能够使这段代码工作,但结果是我只能传输 4 条消息,其余消息在模拟器中不可见。
我正在尝试查找该库是否有一些限制或者我上面的错误。 嗯,我是 Android 编码的新手。
下面是我在模拟器中得到的结果:
我想知道如何一次性发送50条消息
这肯定是您手机上蓝牙芯片的限制 phone。不同的设备型号有不同的广告限制。例如,华为 P9 Lite 一次只能传输一个广告。 Nexus 5x 可以发布 10 个或更多。许多 phone 型号(如果有的话)不太可能同时支持 50 个广告。
无法以编程方式知道限制,因为 OS 没有提供 API 来查询此限制——您只需要尝试一下。您可以通过将代码放入 onStartFailure
回调中来检查何时收到错误广告。
您也可以使用 [BeaconScope]((https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner) 应用程序对此进行测试。但请记住,传输限制是设备范围内的。如果一个应用程序正在广告信标,则会占用一个广告位来自下一个应用程序。不,没有办法知道其他应用程序是否在投放广告。