BLE用のandroidサンプルアプリを試してみましたが、思い通りの出力が得られません。具体的に UUID をスキャンして、デバイスが送信しているメッセージを取得する方法を知る必要があります。
BLEトランスミッターの場合、MacRadiusを使用してビーコンとして機能させるトランスミッターとしてMacBookを使用しています。
Mac の uuid を検出し、後でそこから情報を取得したいだけです。
コード例が必要
ありがとう
BLE用のandroidサンプルアプリを試してみましたが、思い通りの出力が得られません。具体的に UUID をスキャンして、デバイスが送信しているメッセージを取得する方法を知る必要があります。
BLEトランスミッターの場合、MacRadiusを使用してビーコンとして機能させるトランスミッターとしてMacBookを使用しています。
Mac の uuid を検出し、後でそこから情報を取得したいだけです。
コード例が必要
ありがとう
プライマリ サービスの 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
次に、自分自身をさらに解析して、より多くの情報を取得する必要があります。