15

我正在浏览 Stack 和互联网,寻找一个简单的解决方案来获取UUID我当前使用的设备。我偶然发现了这样的帖子,但似乎没有一个对我有帮助。

该文档告诉我有关此 getUuids()功能的信息,但是在浏览Android 蓝牙的文档时,我最终拥有了一个BluetoothAdapter,但我需要一个BluetoothDevice来执行此功能。

所以我需要知道以下几点:

1)返回的功能真的是设备UUID吗?因为名称表示复数(getUuid s

2)我如何获得这个实例BluetoothDevice

谢谢!

4

2 回答 2

18

使用反射,您可以调用隐藏的getUuids()方法BluetoothAdater

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是 forHandsfreeAudioGatewayServiceClass00001105-0000-1000-8000-00805f9b34fb是 for OBEXObjectPushServiceClass。此方法的实际可用性可能取决于设备和固件版本。

于 2013-10-28T20:36:46.817 回答
2

为此,您必须定义蓝牙权限:

<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。

于 2018-03-22T15:42:14.183 回答