1
我試圖在我的應用程序中顯示所有可用的Eddystone信標。我有兩個eddystone用於測試此應用程序。當我打開應用程序時,它是scann信標並顯示附加圖像的重複值。 。我想在同一時間顯示兩個信標,當我打開應用程序(-57信標和-69信標)。我使用下面的代碼。如何獲得所有可用的Eddystone信標
我已經在上面
txpowerArray= new ArrayList<String>();
urlArray=new ArrayList<String>();
private BluetoothAdapter.LeScanCallback mLeScanCallback =new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device,final int rssi,final byte[] scanRecord)
{
new Thread()
{
public void run()
{
RangingActivity.this.runOnUiThread(new Runnable()
{
public void run()
{
connect(rssi, scanRecord,device);
}
});
}
}.start();
}
};
public void connect(int rssi, byte[] scanRecord,BluetoothDevice device){
List<ADStructure> structures =
ADPayloadParser.getInstance().parse(scanRecord);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
for (ADStructure structure : structures)
{
if (structure instanceof EddystoneURL)
{
EddystoneURL es = (EddystoneURL)structure;
Log.d("Eddy", "Tx Power = " + es.getTxPower());
Log.d("Eddy", "URL = " + es.getURL());
clickUrl=es.getURL().toString();
txpower=String.valueOf(es.getTxPower());
txpowerArray.add(txpower);
urlArray.add("" + clickUrl);
Log.d("devicelist", " "+url+" "+txpower);
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}else {
}
}
}
}, 4000);
在你的方式只掃描一個beacon.then我有添加處理程序掃描一段時間,然後它顯示重複信標。如何防止?我已編輯我的問題 – vindy
是的,如果廣告週期比掃描週期足夠頻繁,則在掃描週期內信標可能會出現多次。因此,您應該識別每個信標(可能使用Eddystone-UID/Eddystone-URL或device.getAddress()'),並將它們添加到列表中一次。您可以保留最近看到的信標列表並避免添加重複項。如果信標已經存在於列表中,只需更新任何數據。我不知道[有關掃描iBeacons的答案](http://stackoverflow.com/questions/32952919/android-how-do-i-set-uuid-beacon-value-to-proper-textview/32986093)是有幫助的。 –