2016-10-14 9 views
1

私は、アプリケーションに使用可能なすべてのエッジストーンビーコンを表示しようとしています。私はこのアプリケーションをテストするために2つのエッジストーンを持っています。 .i私はアプリを開くときにsametimeの両方のビーコンを表示したい(-57ビーコンと-69ビーコン)。私は以下のcode.previouslyを使用してこれを投稿し、適切な答えを得ていない。重複するエッジストーンスキャンの結果を防ぐ方法

私はあなたが検出されたデバイスのユニークなリストを維持する必要がトップ

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); 

Duplicate beacon result

答えて

0

にこれらのArrayListを初期化しています。 Javaでは、多くの場合、ArrayListの代わりにHashMapを使用します。 HashMapのキーは、各項目を区別するためのフィールドです。あなたのケースでは、Eddystone URLまたはおそらくBluetoothデバイスのMACアドレスをキーとして使用することができます。そのため、固有のビーコンであることがわかります。

ここビーコンブルートゥースMACアドレスによって一意のエントリを保つあなたは上述したものを行うになるだろう変更は、以下のとおりです。

txpowerMap= new HashMap<String,String>(); 
urlMap=new HashMap<String,String>(); 
... 

txpowerMap.put(device.getAddress(), txpower); 
urlMap.put(device.getAddress(), "" + clickUrl); 

それはHashMapコンテナで動作しますので、あなたはまた、あなたのビューロジックを更新する必要がありますArrayListの代わりにHashMapの値をArrayListに変換することができます。

ArrayList<String> txPowerArray = new ArrayList<String>(txpowerMap.values()); 
関連する問題