我正在使用Android beacon库, 版本-
compile 'org.altbeacon:android-beacon-library:2.15.1'
我正在尝试开发一个APK,用于从移动设备传输多个信标。 我需要执行此测试或POC来测试读者一次可以读取多少个信标。
我正在使用以下代码通过Android Beacon库传输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以传输信标。
createBeacon并传输其广告的方法
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条消息。
答案 0 :(得分:1)
这无疑是您手机上蓝牙芯片的限制。不同的设备型号具有不同的广告限制。例如,华为P9 Lite一次只能发送一个广告。 Nexus 5x可以宣传10个或更多。许多电话型号(如果有)不可能同时支持50个广告。
由于操作系统没有提供API来查询此限制,因此无法以编程方式知道该限制-您只需尝试一下即可。您可以通过将代码放入onStartFailure
回调中来检查何时收到错误的广告。
您也可以使用[BeaconScope]((https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner)应用进行测试。但是请记住,传输限制是在整个设备范围内进行的。如果一个应用在宣传信标,则距离下一个应用程序。没有,没有办法知道其他应用程序是否在做广告。