現在使用しているデバイスのUUID
を取得する簡単な解決策として、スタックとインターネットを調べていました。私はつまずきました このような投稿 しかし、それらのどれも私を助けてくれなかったようです。
ドキュメントは これについてgetUuids()
関数を教えてくれますが、 Android Bluetooth のドキュメントを通過すると、最終的に BluetoothAdapter が表示されますこの関数を実行するにはBluetoothDevice
が必要です。
だから私は以下を知る必要があります:
1)関数は実際にデバイスを返していますかUUID
?名前が複数形であるため(getUuid s
)
2)BluetoothDevice
のインスタンスを取得するにはどうすればよいですか?
ありがとう!
リフレクションを使用すると、BluetoothAdater
で隠しメソッドgetUuids()
を呼び出すことができます。
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Method getUuidsMethod = BluetoothAdapter.class.getDeclaredMethod("getUuids", null);
ParcelUuid[] uuids = (ParcelUuid[]) getUuidsMethod.invoke(adapter, null);
for (ParcelUuid uuid: uuids) {
Log.d(TAG, "UUID: " + uuid.getUuid().toString());
}
これはNexus Sでの結果です。
UUID: 00001000-0000-1000-8000-00805f9b34fb
UUID: 00001001-0000-1000-8000-00805f9b34fb
UUID: 00001200-0000-1000-8000-00805f9b34fb
UUID: 0000110a-0000-1000-8000-00805f9b34fb
UUID: 0000110c-0000-1000-8000-00805f9b34fb
UUID: 00001112-0000-1000-8000-00805f9b34fb
UUID: 00001105-0000-1000-8000-00805f9b34fb
UUID: 0000111f-0000-1000-8000-00805f9b34fb
UUID: 0000112f-0000-1000-8000-00805f9b34fb
UUID: 00001116-0000-1000-8000-00805f9b34fb
たとえば、0000111f-0000-1000-8000-00805f9b34fb
はHandsfreeAudioGatewayServiceClass
を表し、00001105-0000-1000-8000-00805f9b34fb
はOBEXObjectPushServiceClass
を表します。この方法が実際に利用できるかどうかは、デバイスとファームウェアのバージョンによって異なります。
これを実現するには、Bluetooth許可を定義する必要があります。
_<uses-permission Android:name="Android.permission.BLUETOOTH"/>
_
次に、リフレクションを使用してメソッドgetUuids()
を呼び出すことができます。
_ try {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Method getUuidsMethod = BluetoothAdapter.class.getDeclaredMethod("getUuids", null);
ParcelUuid[] uuids = (ParcelUuid[]) getUuidsMethod.invoke(adapter, null);
if(uuids != null) {
for (ParcelUuid uuid : uuids) {
Log.d(TAG, "UUID: " + uuid.getUuid().toString());
}
}else{
Log.d(TAG, "Uuids not found, be sure to enable Bluetooth!");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
_
Uuidを取得するには、Bluetoothを有効にする必要があります。