0

BLE用のandroidサンプルアプリを試してみましたが、思い通りの出力が得られません。具体的に UUID をスキャンして、デバイスが送信しているメッセージを取得する方法を知る必要があります。

BLEトランスミッターの場合、MacRadiusを使用してビーコンとして機能させるトランスミッターとしてMacBookを使用しています。

Mac の uuid を検出し、後でそこから情報を取得したいだけです。

コード例が必要

ありがとう

4

1 に答える 1

-1

プライマリ サービスの UUID は、次のスニペットscanRecordを使用して に渡されたパラメーターから解析できます。BluetoothAdapter.LeScanCallback#onLeScan()

public static List<UUID> parseServiceUuids(final byte[] advertisedData)
    {
        List<UUID> uuids = new ArrayList<UUID>();

         if( advertisedData == null )  return uuids;

        int offset = 0;
        while(offset < (advertisedData.length - 2))
        {
            int len = advertisedData[offset++];
            if(len == 0)
                break;

            int type = advertisedData[offset++];
            switch(type)
            {
                case 0x02: // Partial list of 16-bit UUIDs
                case 0x03: // Complete list of 16-bit UUIDs
                    while(len > 1)
                    {
                        int uuid16 = advertisedData[offset++];
                        uuid16 += (advertisedData[offset++] << 8);
                        len -= 2;
                        uuids.add(UUID.fromString(String.format("%08x-0000-1000-8000-00805f9b34fb", uuid16)));
                    }
                    break;
                case 0x06:// Partial list of 128-bit UUIDs
                case 0x07:// Complete list of 128-bit UUIDs
                      // Loop through the advertised 128-bit UUID's.
                    while(len >= 16)
                    {
                        try
                        {
                            // Wrap the advertised bits and order them.
                            ByteBuffer buffer = ByteBuffer.wrap(advertisedData, offset++, 16).order(ByteOrder.LITTLE_ENDIAN);
                            long mostSignificantBit = buffer.getLong();
                            long leastSignificantBit = buffer.getLong();
                            uuids.add(new UUID(leastSignificantBit, mostSignificantBit));
                        }
                        catch(IndexOutOfBoundsException e)
                        {
                            // Defensive programming.
                            Log.e(TAG, e.toString());
                            continue;
                        }
                        finally
                        {
                            // Move the offset to read the next uuid.
                            offset += 15;
                            len -= 16;
                        }
                    }
                    break;
                default:
                    offset += (len - 1);
                    break;
            }
        }

        return uuids;
    }

scanRecord次に、自分自身をさらに解析して、より多くの情報を取得する必要があります。

于 2014-11-13T19:34:03.770 に答える