2016-08-25 7 views
0

AndroidアプリからiBeaconを送信するために以下のコードを使用しています。私はそれらのデータを取得する方法は?パケットで送信されたデータを取得するため iBeaconからパケットデータを転送するandroid

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

は、それは可能でしょうか? ありがとう!

答えて

0

です:

使用
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"); 
byte[] bytes = p.getBeaconAdvertisementData(beacon); 

上記のコードの場合、バイトの配列は次のようになります:

02 15 6f b0 e0 e9 2a e6 49 d3 bb a3 3c b7 69 8c 77 e2 ... 

このバイト配列は完全ではありませんパケットは大気中で送信され、メーカーのデータ部分のみが送信されます。大気中で送信されたパケットの前には、PDUタイプバイトと長さバイトが付加され、フラグPDUがプレフィックスされています。ただし、これらの接頭辞は、送信されるすべてのパケットについて同じであり、Androids BLE送信APIによって自動的に追加されるため、getBeaconAdvertisementData()によって返されるバイトには含まれません。

+0

こんにちは@davidgyoung。本当にありがとうございました。ほんとうにありがとう! – Helmi

0

Androidデバイスで送信されたデータを受信すると仮定すると、同じライブラリを使用してそのデータを送信することができます。

これは、あなたは、単にパケットのバイトが送信されるように取得したい場合、あなたはこのようにそれを行うことができ、流れがあることだろうか

@Override 
public void onCreate(Bundle bundle){ 
    ... 
    beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
      setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 
    beaconManager.bind(this); 
    ... 
} 


@Override 
public void onBeaconServiceConnect() { 

    /** 
    * Start Monitoring the relevant region. 
    * */ 

    try { 
     beaconManager.startMonitoringBeaconsInRegion(new Region("Generic_Region", null, 
       null, null)); 
    } 
    catch (RemoteException e){ 
     e.printStackTrace(); 
    } 

    beaconManager.addMonitorNotifier(new MonitorNotifier() { 

     /** 
     * Start ranging for Beacons when a region is entered. 
     * */ 

     @Override 
     public void didEnterRegion(Region region) { 
      try { 
       beaconManager.startRangingBeaconsInRegion(region); 
      } catch (RemoteException e) { 
       e.printStackTrace(); 
      } 
     } 

     /** 
     * Stop ranging for Beacons on region exit. 
     * */ 
     @Override 
     public void didExitRegion(Region region) { 
      try { 
       beaconManager.stopRangingBeaconsInRegion(region); 
      } 
      catch (RemoteException e) { 
       e.printStackTrace(); 
      } 
      Log.i(TAG, "SERVICE : I no longer see a beacon"); 
     } 

     @Override 
     public void didDetermineStateForRegion(int state, Region region) { 
      Log.i(TAG, "SERVICE : I have just switched from seeing/not seeing beacons: " + state); 
     } 
    }); 


    beaconManager.addRangeNotifier(new RangeNotifier() { 

     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) { 




      } 
    }); 

} 
+0

これは私にはパケットバイナリ形式のデータが表示されますか?今すぐ必要なのは – Helmi

+0

です。RangeNotifierメソッドは、現在範囲内にある監視対象領域にビーコンのコレクションを提供しています。このコレクションのすべてのビーコンには、実際にアクセスできるいくつかのデータがあります。 [こちら](https://altbeacon.github.io/android-beacon-library/javadoc/org/altbeacon/beacon/Beacon.html)は、ビーコンとあなたが得ることのできる種類の情報です。 –

関連する問題