0

私はいくつかのRed Bear Beacon (Android ではデバイスとして課金されます) を Android アプリケーションに使用しています。ネイティブ アプリbluetoothと同様に、ビーコンに格納されている UUID を取得したいと考えています。彼らが提供するサンプルを使用しても、入手できませんでした。

私が試したこと:

  1. 最初のアプローチ

     BluetoothManager mBluetoothManager = (BluetoothManager)
     getSystemService(Context.BLUETOOTH_SERVICE);
    
     mBluetoothAdapter = mBluetoothManager.getAdapter();
    
     mBluetoothAdapter.startLeScan(mLeScanCallback);
    
    
    BluetoothAdapter.LeScanCallback mLeScanCallback = new
         BluetoothAdapter.LeScanCallback() {   
                  @Override
                  public void onLeScan(final BluetoothDevice device, final int rssi,
                          final byte[] scanRecord) {
    
                      runOnUiThread(new Runnable() {
                          @Override
                          public void run() {
    
                              if (mDevice.indexOf(device) == -1){
                                  mDevice.add(device);
    
                                  byte[] serviceUuidBytes = new byte[16];
                                  String serviceUuid = "";
                                  for (int i = 32, j = 0; i >= 17; i--, j++) {
                                      serviceUuidBytes[j] = scanRecord[i];
                                  }
                                  serviceUuid = bytesToHex(serviceUuidBytes);
    
                                  Log.i(TAG, "UUID is: " + serviceUuid);
                                    //This is the result 420903bf01004915e79610a7f5d060b0
                              }
                          }
                      });
                  }
              };
    
  2. 2 番目のアプローチ

    BluetoothLeScanner mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
    
    mBluetoothLeScanner.startScan(mScanCallback); 
    
    ScanCallback mScanCallback = new ScanCallback() {
    
          public void onScanResult(int callbackType, android.bluetooth.le.ScanResult result) {
              Log.i(TAG, "scan result" + result.toString());
                //this contains something like [...] mServiceUuids=[b0702980-a295-a8ab-f734-031a98a512de][....]
          };
      };
    

これらの結果のどれも、420903bf01004915e79610a7f5d060b0またはb0702980-a295-a8ab-f734-031a98a512de私が探しているものではありません。次のようにする必要があります: (RedBear BeaconToolアプリのスクリーンショット) ここに画像の説明を入力

私のビーコンでいくつかのテストを行った後、この UUID が私のmBluetoothLeScanner->によって見つかったものと何らかの形でリンクされていることがわかりましたb0702980-a295-a8ab-f734-031a98a512de

redbearかビーコンの経験があり、アプリでビーコンUUID(E2C56DB5-DFFB-48D2-B060-D0F5A71096E0) を取得する方法を教えてもらえますか?

また

E2C56DB5-DFFB-48D2-B060-D0F5A71096E0と が異なる方法でエンコードされた同じものを表しているかどうかを誰かに教えてもらえますb0702980-a295-a8ab-f734-031a98a512deか? はいの場合、どのように変換できますか?

私が十分に明確であることを願っています。助けてください。どんな助けでも大歓迎です!ありがとう。

4

2 に答える 2

3

ビーコン近接 UUID は Bluetooth GATT サービス UUID と同じではないことを理解してください。これが、表示する 2 番目のサンプルが機能しない理由です。最初のアプローチで試みているように、アドバタイズメントのバイトから Proximity UUID を解析する必要があります。ただし、そのアプローチでは、このコードは問題があります

for (int i = 32, j = 0; i >= 17; i--, j++) {
  serviceUuidBytes[j] = scanRecord[i];
}

まず第一に、スキャンから読み取っているバイトは逆順ではないため、i 変数を減らすべきではありません。これを適切に行うには、Proximity UUID およびその他のフィールドのオフセットを知る必要があります。これは Apple 独自の情報ですが、Google で iBeacon レイアウトまたは「プロファイル」を検索するとすぐに入手できます。

また、このような単純な処理以上の処理を行いたい場合は、私のAndroid Beacon Libraryのようなフル機能のライブラリの使用を検討してください。すぐに使用できる AltBeacons でのみ機能しますが、ビーコンのレイアウトがわかっている場合は、独自のビーコン タイプで構成するのは簡単です。「setBeaconLayout」をGoogleで検索するだけです。

于 2015-02-22T21:51:51.887 に答える