2013-10-28 222 views
14

我正在瀏覽Stack和互聯網,獲取我正在使用的設備的一個簡單解決方案UUID。我偶然發現了posts like this,但他們似乎都沒有幫助我。Android - 獲取此設備的藍牙UUID

的文檔告訴我about thisgetUuids()功能,但通過DOC去爲Android Bluetooth當我最終有BluetoothAdapter,但我需要一個BluetoothDevice執行此功能。

所以,我需要了解以下內容:

1)函數返回真正的設備UUID?因爲名稱表示複數(getUuid s

2)如何獲得此BluetoothDevice的實例?

謝謝!

+0

無論如何,你怎麼知道UUID是你的藍牙設備@Ron? – gumuruh

回答

15

使用反射,你可以調用隱藏方法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-00805f9b34fbHandsfreeAudioGatewayServiceClass00001105-0000-1000-8000-00805f9b34fb用於OBEXObjectPushServiceClass。此方法的實際可用性可能取決於設備和固件版本。

+0

我使用SDK16,它不適合我。 'uuids'是'null'。此外,我想只有我的藍牙uuid。你知道如何得到這個嗎? – Ron

+0

設備暴露的每個藍牙服務都有一個uuid;這就是爲什麼你會看到智能手機的多個uuids。我使用Android 4.1.2的Nexus S上的SDK和Android 4.3上的Galaxy Nexus執行測試。你使用哪種設備? –

+0

Galaxy S2 ...我是否需要啓動藍牙才能找回我的uuid? – Ron