android藍(lán)牙開(kāi)發(fā)(DOC)_第1頁(yè)
android藍(lán)牙開(kāi)發(fā)(DOC)_第2頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Android平臺(tái)支持藍(lán)牙網(wǎng)絡(luò)協(xié)議棧,實(shí)現(xiàn)藍(lán)牙設(shè)備之間數(shù)據(jù)的無(wú)線傳輸。 本文檔描述了怎樣利用android平臺(tái)提供的藍(lán)牙API去實(shí)現(xiàn)藍(lán)牙設(shè)備之間的通信,藍(lán)牙設(shè)備 之間的通信主要包括了四個(gè)步驟:設(shè)置藍(lán)牙設(shè)備; 尋找局域網(wǎng)內(nèi)可能或者匹配的設(shè)備; 連接設(shè)備;設(shè)備之間的數(shù)據(jù)傳輸。 以下是建立藍(lán)牙連接的所需要的一些基本類(lèi):BluetoothAdapter類(lèi):代表了一個(gè)本地的藍(lán)牙適配器。他是所有藍(lán)牙交互的的入口點(diǎn)。利 用它你可以發(fā)現(xiàn)其他藍(lán)牙設(shè)備,查詢(xún)綁定了的設(shè)備,使用已知的MAC地址實(shí)例化一個(gè)藍(lán)牙 設(shè)備和建立一個(gè)BluetoothServerSocket(作為服務(wù)器端)來(lái)監(jiān)聽(tīng)來(lái)自其他設(shè)備的連接。Bluet

2、oothDevice類(lèi):代表了一個(gè)遠(yuǎn)端的藍(lán)牙設(shè)備, 使用它請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或者獲取 遠(yuǎn)端藍(lán)牙設(shè)備的名稱(chēng)、地址、種類(lèi)和綁定狀態(tài)。 (其信息是封裝在bluetoothsocket中)。Bluetoothsocket類(lèi):代表了一個(gè)藍(lán)牙套接字的接口(類(lèi)似于tcp中的套接字) ,他是應(yīng)用 程序通過(guò)輸入、輸出流與其他藍(lán)牙設(shè)備通信的連接點(diǎn)。Blueboothserversocket類(lèi):代表打開(kāi)服務(wù)連接來(lái)監(jiān)聽(tīng)可能到來(lái)的連接請(qǐng)求(屬于server端),為了連接兩個(gè)藍(lán)牙設(shè)備必須有一個(gè)設(shè)備作為服務(wù)器打開(kāi)一個(gè)服務(wù)套接字。當(dāng)遠(yuǎn)端設(shè)備發(fā)起連接請(qǐng)求的 時(shí)候, 并且已經(jīng) 連接到 了的時(shí) 候,Blueboothserver

3、socket類(lèi)將會(huì) 返回一 個(gè)bluetoothsocket。Bluetoothclass類(lèi):描述了一個(gè)藍(lán)牙設(shè)備的一般特點(diǎn)和能力。他的只讀屬性集定義了設(shè)備 的主、 次設(shè)備類(lèi)和一些相關(guān)服務(wù)。 然而,他并沒(méi)有準(zhǔn)確的描述所有該設(shè)備所支持的藍(lán)牙文件 和服務(wù),而是作為對(duì)設(shè)備種類(lèi)來(lái)說(shuō)的一個(gè)小小暗示。下面說(shuō)說(shuō)具體的編程實(shí)現(xiàn):首先,要操作藍(lán)牙,先要在AndroidManifest.xml里加入權(quán)限其次,必須確定你的設(shè)備支持藍(lán)牙,并保證他可以用。如果你的設(shè)備支持藍(lán)牙,將它使能。 當(dāng)然, 有兩種方法, 一種是在你的系統(tǒng)設(shè)置里開(kāi)啟藍(lán)牙, 另外一中是在你的應(yīng)用程序里啟動(dòng) 藍(lán)牙功能,第一種方法就不講了,具體講一個(gè)第二種

4、方法:首先通過(guò)調(diào)用靜態(tài)方法getDefaultAdapter()獲取藍(lán)牙適配器bluetoothadapter,以后你就可 以使用該對(duì)象了。如果返回為空,the story is over。BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter = null) / Device does not support Bluetooth其次,調(diào)用isEnabled()來(lái)查詢(xún)當(dāng)前藍(lán)牙設(shè)備的狀態(tài),如果返回為false,則表示藍(lán)牙設(shè)備沒(méi)有開(kāi)啟,接下來(lái)你需要封裝一個(gè)ACTI

5、ON_REQUEST_ENABL請(qǐng)求至U in te nt里面,調(diào)用startActivityForResult()方法使能藍(lán)牙設(shè)備,例如:if (!mBluetoothAdapter.isEnabled() IntentenableBtIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);至此, 如不出意外, 恭喜你的藍(lán)牙設(shè)備已經(jīng)開(kāi)啟了, 接下來(lái)需要查找周邊可能存在的藍(lán)牙設(shè) 備了。查找設(shè)備:使用bluetoothada

6、pter類(lèi)里的方法,你可以查找遠(yuǎn)端設(shè)備(不過(guò)藍(lán)牙查找的范圍好像是在 十米以?xún)?nèi)吧)或者查詢(xún)?cè)谀闶謾C(jī)上已經(jīng)匹配(或者說(shuō)綁定)的其他手機(jī)了。 當(dāng)然需要確定對(duì) 方藍(lán)牙設(shè)備已經(jīng)開(kāi)啟或者已經(jīng)開(kāi)啟了“被發(fā)現(xiàn)使能 “功能 (對(duì)方設(shè)備是可以被發(fā)現(xiàn)的是你能 夠發(fā)起連接的前提條件) 。如果該設(shè)備是可以被發(fā)現(xiàn)的,會(huì)反饋回來(lái)一些對(duì)方的設(shè)備信息, 比如名字、MAC地址等,利用這些信息,你的設(shè)備就可以選擇去向?qū)Ψ匠跏蓟粋€(gè)連接。 如果你是第一次與該設(shè)備連接, 那么一個(gè)配對(duì)的請(qǐng)求就會(huì)自動(dòng)的顯示給用戶(hù)。 當(dāng)設(shè)備配對(duì)好 之后,他的一些基本信息(主要是名字和MAC)被保存下來(lái)并可以使用藍(lán)牙的API來(lái)讀取。使用已知的MAC地址就可以

7、對(duì)遠(yuǎn)端的藍(lán)牙設(shè)備發(fā)起連接請(qǐng)求。匹配好的設(shè)備和連接上的設(shè)備的不同點(diǎn): 匹配好只是說(shuō)明對(duì)方設(shè)備發(fā)現(xiàn)了你的存在, 并擁有一個(gè)共同的識(shí)別碼,并且可以連接。連接上:表示當(dāng)前設(shè)備共享一個(gè)RFCOMM信道并且兩者之間可以交換數(shù)據(jù)。也就是是說(shuō)藍(lán)牙設(shè)備在建立RFCOMM信道之前,必須是已經(jīng)配對(duì) 好了的。怎么查詢(xún)匹配好的設(shè)備: 在建立連接之前你必須先查詢(xún)配對(duì)好了的藍(lán)牙設(shè)備集(你周?chē)乃{(lán)牙設(shè)備可能不止一個(gè)),以便你選取哪一個(gè)設(shè)備進(jìn)行通信, 例如你可以你可以查詢(xún)所有配對(duì)的藍(lán)牙設(shè)備, 并使用一個(gè) 數(shù)組適配器將其打印顯示出來(lái):Set pairedDevices = mBluetoothAdapter.getBondedD

8、evices();/ If there are paired devicesif (pairedDevices.size() 0) / Loop through paired devicesfor (BluetoothDevice device : pairedDevices) / Add the name and address to an array adapter to show in a ListViewmArrayAdapter.add(device.getName() + /n + device.getAddress();建立一個(gè)藍(lán)牙連接只需要MAC地址就已經(jīng)足夠了。 掃描設(shè)備:掃

9、描設(shè)備,只需要簡(jiǎn)單的調(diào)用startDiscovery()方法,這個(gè)掃描的過(guò)程大概持續(xù)是12秒, 應(yīng)用程序?yàn)榱薃CTION_FOUND動(dòng)作需要注冊(cè)一個(gè)BroadcastReceiver來(lái)接受設(shè)備掃描到的信 息。對(duì)于每一個(gè)設(shè)備,系統(tǒng)都會(huì)廣播ACTION_FO UND動(dòng)作。例如:/ Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver =new BroadcastReceiver() public void onReceive(Context context, Intent inte

10、nt) String action = intent.getAction();/ When discovery finds a deviceif (BluetoothDevice.ACTION_FOUND.equals(action) / Get the BluetoothDevice object from the IntentBluetoothDevicedevice=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);/ Add the name and address to an array adapter to show i

11、n a ListViewmArrayAdapter.add(device.getName() + /n + device.getAddress();/ Register the BroadcastReceiverIntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver,filter); / Dont forget to unregister during onDestroy注意: 掃描的過(guò)程是一個(gè)很耗費(fèi)資源的過(guò)程, 一旦你找到你需要的設(shè)備之后, 在發(fā)起連接請(qǐng)

12、求之前,確保你的程序調(diào)用can celDiscovery()方法停止掃描。顯然,如果你已經(jīng)連接上一個(gè)設(shè)備,啟動(dòng)掃描會(huì)減少你的通信帶寬。使能被發(fā)現(xiàn):Enabling discoverability如果你想使你的設(shè)備能夠被其他設(shè)備發(fā)現(xiàn),將ACTION_REQUEST_DISCOVERAE動(dòng)昨封裝在intent中并調(diào)用startActivityForResult(Intent, int)方法就可以了。他將在不使你應(yīng)用程序退 出的情況下使你的設(shè)備能夠被發(fā)現(xiàn)。 缺省情況下的使能時(shí)間是120秒,當(dāng)然你可以可以通過(guò) 添加EXTRA_DISCOVERABLE_DURATlON段來(lái)改變使能時(shí)間(最大不超過(guò)300

13、秒,這是出于對(duì)你設(shè)備上的信息安全考慮) 。例如:Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);運(yùn)行該段代碼之后, 系統(tǒng)會(huì)彈出一個(gè)對(duì)話框來(lái)提示你啟動(dòng)設(shè)備使能被發(fā)現(xiàn) (次過(guò)程中如果你 的藍(lán)牙功能沒(méi)有開(kāi)啟,系統(tǒng)會(huì)幫你開(kāi)啟) ,并且如果你準(zhǔn)備對(duì)該遠(yuǎn)端設(shè)備發(fā)現(xiàn)

14、一個(gè)連接,你 不需要開(kāi)啟使能設(shè)備被發(fā)現(xiàn)功能,因?yàn)樵摴δ苤皇窃谀愕膽?yīng)用程序作為服務(wù)器端的時(shí)候才需 要。連接設(shè)備:在你的應(yīng)用程序中, 想建立兩個(gè)藍(lán)牙設(shè)備之間的連接,你必須實(shí)現(xiàn)客戶(hù)端和服務(wù)器端的代碼(因?yàn)槿魏我粋€(gè)設(shè)備都必須可以作為服務(wù)端或者客戶(hù)端) 。一個(gè)開(kāi)啟服務(wù)來(lái)監(jiān)聽(tīng),一個(gè)發(fā) 起連接請(qǐng)求(使用服務(wù)器端設(shè)備的MAC地址)。當(dāng)他們都擁有一個(gè)藍(lán)牙套接字在同一RFECO MM信道上的時(shí)候,可以認(rèn)為他們之間已經(jīng)連接上了。服務(wù)端和客戶(hù)端通過(guò)不同的方 式或者他們的藍(lán)牙套接字。 當(dāng)一個(gè)連接監(jiān)聽(tīng)到的時(shí)候, 服務(wù)端獲取到藍(lán)牙套接字。 當(dāng)客戶(hù)可 打開(kāi)一個(gè)FRCOMM信道給服務(wù)器端的時(shí)候,客戶(hù)端獲取到藍(lán)牙套接字。注意:在

15、此過(guò)程中,如果兩個(gè)藍(lán)牙設(shè)備還沒(méi)有配對(duì)好的,android系統(tǒng)會(huì)通過(guò)一個(gè)通知或者 對(duì)話框的形式來(lái)通知用戶(hù)。RFCOMM連接請(qǐng)求會(huì)在用戶(hù)選擇之前阻塞。當(dāng)你想要連接兩臺(tái)設(shè)備時(shí), 一個(gè)必須作為服務(wù)端( 通過(guò)持有一個(gè)打開(kāi) 的bluetoothserversocket),目的是監(jiān)聽(tīng)外來(lái)連接請(qǐng)求,當(dāng)監(jiān)聽(tīng)到以后提供一個(gè)連接上的bluetoothsocket給客戶(hù)端,當(dāng)客戶(hù)端從bluetoothserversocket得到bluetoothsocket以后就可 以銷(xiāo)毀bluetoothserversocket,除非你還想監(jiān)聽(tīng)更多的連接請(qǐng)求。建立服務(wù)套接字和監(jiān)聽(tīng)連接的基本步驟:首 先 通 過(guò) 調(diào) 用listenU

16、singRfcommWithServiceRecord(String, UUID)方 法 來(lái) 獲 取bluetoothserversocket對(duì)象,參數(shù)string代表了該服務(wù)的名稱(chēng),UUID代表了和客戶(hù)端連接的 一個(gè)標(biāo)識(shí)(128位格式的字符串ID,相當(dāng)于pin碼),UUID必須雙方匹配才可以建立連接。其次調(diào)用accept()方法來(lái)監(jiān)聽(tīng)可能到來(lái)的連接請(qǐng)求,當(dāng)監(jiān)聽(tīng)到以后,返回一個(gè)連接上的藍(lán)牙套接字bluetoothsocket。最后,在監(jiān)聽(tīng)到一個(gè)連接以后,需要調(diào)用close()方法來(lái)關(guān)閉監(jiān)聽(tīng)程序。(一般藍(lán)牙設(shè)備之間是點(diǎn)對(duì)點(diǎn)的傳輸)注意:accept()方法不應(yīng)該放在主Acitvity里面,因?yàn)樗?/p>

17、是一種阻塞調(diào)用(在沒(méi)有監(jiān)聽(tīng)到 連接請(qǐng)求之間程序就一直停在那里) 。解決方法是新建一個(gè)線程來(lái)管理。例如:private class AcceptThread extends Thread private final BluetoothServerSocket mmServerSocket;public AcceptThread() / Use a temporary object that is later assigned to mmServerSocket,/ because mmServerSocket is finalBluetoothServerSocket tmp = null;tr

18、y / MY_UUID is the apps UUID string, also used by the client codetmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID); catch (IOException e) mmServerSocket = tmp;public void run() BluetoothSocket socket = null;/ Keep listening until exception occurs or a socket is returned while (true) t

19、ry socket = mmServerSocket.accept(); catch (IOException e) break;/ If a connection was acceptedif (socket != null) / Do work to manage the connection (in a separate thread)manageConnectedSocket(socket); mmServerSocket.close();break;/* Will cancel the listening socket, and cause the thread to finish

20、*/public void cancel() try mmServerSocket.close(); catch (IOException e) 客戶(hù)端的連接:為了初始化一個(gè)與遠(yuǎn)端設(shè)備的連接,需要先獲取代表該設(shè)備的一個(gè)bluetoothdevice對(duì)象。 通過(guò)bluetoothdevice對(duì)象來(lái)獲取bluetoothsocket并初始化連接:具體步驟:使用bluetoothdevice對(duì)象里的方法createRfcommSocketToServiceRecord(UUID)來(lái)獲取bluetoothsocket。UUID就是匹配碼。然后,調(diào)用connect()方法來(lái)。如果遠(yuǎn)端設(shè)備接收了該連接,他

21、們將在通信過(guò)程中共享RFFCOMM信道,并且connect()方法返回。例如:private class ConnectThread extends Thread private final BluetoothSocket mmSocket;private final BluetoothDevice mmDevice;public ConnectThread(BluetoothDevice device) / Use a temporary object that is later assigned to mmSocket,/ because mmSocket is final Bluetoo

22、thSocket tmp = null;mmDevice = device;/ Get a BluetoothSocket to connect with the given BluetoothDevice try / MY_UUID is the apps UUID string, also used by the server code tmp =device.createRfcommSocketToServiceRecord(MY_UUID); catch (IOException e) mmSocket = tmp;public void run() / Cancel discover

23、y because it will slow down the connection mAdapter.cancelDiscovery();try / Connect the device through the socket. This will block/ until it succeeds or throws an exception mmSocket.connect(); catch (IOException connectException) / Unable to connect; close the socket and get out try mmSocket.close()

24、; catch (IOException closeException) return;/ Do work to manage the connection (in a separate thread)manageConnectedSocket(mmSocket);/* Will cancel an in-progress connection, and close the socket */ public void cancel() try mmSocket.close(); catch (IOException e) 注意:conncet()方法也是阻塞調(diào)用,一般建立一個(gè)獨(dú)立的線程中來(lái)調(diào)用

25、該方法。在設(shè)備discover過(guò)程中不應(yīng)該發(fā)起連接connect(),這樣會(huì)明顯減慢速度以至于連接失敗。且數(shù)據(jù)傳輸完成只有調(diào)用close()方法來(lái)關(guān)閉連接,這樣可以節(jié)省系統(tǒng)內(nèi)部資源。管理連接(主要涉及數(shù)據(jù)的傳輸) :當(dāng)設(shè)備連接上以后,每個(gè)設(shè)備都擁有各自的bluetoothsocket?,F(xiàn)在你就可以實(shí)現(xiàn)設(shè)備之間 數(shù)據(jù)的共享了。1.首先通過(guò)調(diào)用getInputStream()和getOutputStream()方法來(lái)獲取輸入輸出流。 然后通過(guò)調(diào)用read(byte)和write(byte).方法來(lái)讀取或者寫(xiě)數(shù)據(jù)。2.實(shí)現(xiàn)細(xì)節(jié):因?yàn)樽x取和寫(xiě)操作都是阻塞調(diào)用,需要建立一個(gè)專(zhuān)用線程來(lái)管理。3. priv

26、ate class ConnectedThread extends Thread private final BluetoothSocket mmSocket; private final InputStream mmInStream; private finalOutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket) mmSocket = socket; InputStream tmpIn = null;OutputStream tmpOut = null;/ Get the input and outpu

27、t streams, using temp objects because/ member streams are final try tmp In = socket.get In putStream(); tmpOut = socket.getOutputStream(); catch (lOException e) mml nStream = tmpln; mmOutStream = tmpOut;public void run() byte buffer = new byte1024;/ buffer store for the streamint bytes; / bytes retu

28、r ned from read()/ Keep listening to the InputStream until an exception occurs while (true) try / Read from the In putStreambytes = mmI nStream.read(buffer);/ Send the obtained bytes to the UI ActivitymHa ndler.obtai nM essage(MESSAGE_READ, bytes, -1, buffer) .sendToTarget(); catch (IOExceptio n e)

29、break;/* Call this from the main Activity to send data to the remote device */ public void write(byte bytes)try mmOutStream.write(bytes); catch (IOException e) /* Call this from the main Activity to shutdown the connection */ public void can cel() try mmSocket.close(); catch (IOException e) An droid

30、藍(lán)牙UUIDan droid 藍(lán)牙 UUID,藍(lán)牙開(kāi)發(fā)必備居家良藥。ServiceDiscoveryServerServiceClasslD_UUID =00001000-0000-1000-8000-00805F9B34FBBrowseGroupDescriptorServiceClasslD_UUID =00001001-0000-1000-8000-00805F9B34FBPublicBrowseGroupServiceClass_UUID =00001002-0000-1000-8000-00805F9B34FB#藍(lán)牙串口服務(wù)SerialPortServiceClass_UUID =

31、00001101-0000-1000-8000-00805F9B34FBLANAccessUsi ngPPPServiceClass_UUID =00001102-0000-1000-8000-00805F9B34FB#撥號(hào)網(wǎng)絡(luò)服務(wù)DialupNetworki ngServiceClass_UUID =00001103-0000-1000-8000-00805F9B34FB#信息同步服務(wù)IrMCSy ncServiceClass_UUID = 00001104-0000-1000-8000-00805F9B34FBSDP_OBEXObjectPushServiceClass_UUID =000

32、01105-0000-1000-8000-00805F9B34FB#文件傳輸服務(wù)OBEXFileTra nsferServiceClass_UUID =00001106-0000-1000-8000-00805F9B34FBIrMCS yn cComma ndServiceClass_UUID =00001107-0000-1000-8000-00805F9B34FBSDP_HeadsetServiceClass_UUID = 00001108-0000-1000-8000-00805F9B34FBCordlessTeleph ony ServiceClass_UUID =00001109-0

33、000-1000-8000-00805F9B34FBSDP_AudioSourceServiceClass_UUID =0000110A-0000-1000-8000-00805F9B34FBSDP_AudioSi nkServiceClass_UUID =0000110B-0000-1000-8000-00805F9B34FBSDP_AVRemoteCo ntrolTargetServiceClass_UUID =0000110C-0000-1000-8000-00805F9B34FBSDP_Adva ncedAudioDistributio nServiceClass_UUID =0000

34、110D-0000-1000-8000-00805F9B34FBSDP_AVRemoteC on trolServiceClass_UUID =0000110E-0000-1000-8000-00805F9B34FBVideoC onferencin gServiceClass_UUID =0000110F-0000-1000-8000-00805F9B34FBIn tercomServiceClass_UUID = 00001110-0000-1000-8000-00805F9B34FB#藍(lán)牙傳真服務(wù)FaxServiceClass_UUID = 00001111-0000-1000-8000

35、-00805F9B34FBHeadsetAudioGatewayServiceClass_UUID =00001112-0000-1000-8000-00805F9B34FBWAPServiceClass_UUID = 00001113-0000-1000-8000-00805F9B34FBWAPClie ntServiceClass_UUID =00001114-0000-1000-8000-00805F9B34FB#個(gè)人局域網(wǎng)服務(wù)PANUServiceClass_UUID = 00001115-0000-1000-8000-00805F9B34FB#個(gè)人局域網(wǎng)服務(wù)NAPServiceCla

36、ss_UUID = 00001116-0000-1000-8000-00805F9B34FB#個(gè)人局域網(wǎng)服務(wù)GNServiceClass_UUID = 00001117-0000-1000-8000-00805F9B34FBDirectPri ntin gServiceClass_UUID = 00001118-0000-1000-8000-00805F9B34FBRefere ncePri nti ngServiceClass_UUID =00001119-0000-1000-8000-00805F9B34FBImagi ngServiceClass_UUID = 0000111A-0000

37、-1000-8000-00805F9B34FBImagi ngResp on derServiceClass_UUID =0000111B-0000-1000-8000-00805F9B34FBImagi ngAutomaticArchiveServiceClass_UUID =0000111C-0000-1000-8000-00805F9B34FBImagi ngRefere nceObjectsServiceClass_UUID =0000111D-0000-1000-8000-00805F9B34FBSDP_Ha ndsfreeServiceClass_UUID =0000111E-00

38、00-1000-8000-00805F9B34FB HandsfreeAudioGatewayServiceClass_UUID =0000111F-0000-1000-8000-00805F9B34FBDirectPri nti ngRefere nceObjectsServiceClass_UUID =00001120-0000-1000-8000-00805F9B34FBReflectedUIServiceClass_UUID = 00001121-0000-1000-8000-00805F9B34FBBasicPri ngin gServiceClass_UUID =00001122-

39、0000-1000-8000-00805F9B34FBPrintin gStatusServiceClass_UUID =00001123-0000-1000-8000-00805F9B34FB#人機(jī)輸入服務(wù)Huma nln terfaceDeviceServiceClass_UUID =00001124-0000-1000-8000-00805F9B34FBHardcopyCableReplaceme ntServiceClass_UUID =00001125-0000-1000-8000-00805F9B34FB#藍(lán)牙打印服務(wù)HCRPri ntServiceClass_UUID = 000

40、01126-0000-1000-8000-00805F9B34FBHCRSca nServiceClass_UUID = 00001127-0000-1000-8000-00805F9B34FBCommo nlSDNAccessServiceClass_UUID =00001128-0000-1000-8000-00805F9B34FBVideoCo nferencin gGWServiceClass_UUID =00001129-0000-1000-8000-00805F9B34FBUDIMTServiceClass_UUID = 0000112A-0000-1000-8000-00805F

41、9B34FBUDITAServiceClass_UUID = 0000112B-0000-1000-8000-00805F9B34FBAudioVideoServiceClass_UUID =0000112C-0000-1000-8000-00805F9B34FBSIMAccessServiceClass_UUID =0000112D-0000-1000-8000-00805F9B34FBPnPIn formatio nServiceClass_UUID =00001200-0000-1000-8000-00805F9B34FBGen ericNetworki ngServiceClass_U

42、UID =00001201-0000-1000-8000-00805F9B34FBGen ericFileTra nsferServiceClass_UUID =00001202-0000-1000-8000-00805F9B34FBGen ericAudioServiceClass_UUID =00001203-0000-1000-8000-00805F9B34FBGen ericTeleph on yServiceClass_UUID =00001204-0000-1000-8000-00805F9B34FB今天找了一下 關(guān)於 Bluetooth 的標(biāo)準(zhǔn) Service/Profile 的

43、 UUID,但是看了一 下Specification Doucments 都只有 16bits 長(zhǎng),這是所謂的 UUID16 格式 後來(lái)才了解,原來(lái) Bluetooth 將 UUID 的部份固定,只取 16bits 作為各種 Service 的區(qū)分,這樣可以節(jié)省分析 SDP Record and 與程式空間,避免增加 Bluetooth Device 的成本。地下的值可以從 windows XP or Server 2003 SDK 的 bt_sdp.h or BlueZ 的sdp.h(UUID16)中找到定義,可以觀察出 下列的固定序列除了替換 XXXX 部份0000 xxxx-0000-1

44、000-8000-00805F9B34FB,而 XXXX 部份就是所謂的 UUID16 定義。Protocols UUID /assig ned-nu mbers/sdp.htmBASE UUID 00000000-0000-1000-8000-00805F9B34FBSDP_PROTOCOL_UUID=00000001-0000-1000-8000-00805F9B34FB;UDP_PROTOCOL_UUID=00000002-0000-1000-8000-00805F9B34FB;RFCOMM_PROTOCOL_UUID = 00000003-

45、0000-1000-8000-00805F9B34FB;TCP_PROTOCOL_UUID = 00000004-0000-1000-8000-00805F9B34FB;TCSBIN_PROTOCOL_UUID = 00000005-0000-1000-8000-00805F9B34FB;TCSAT_PROTOCOL_UUID=00000006-0000-1000-8000-00805F9B34FB;OBEX_PROTOCOL_UUID=00000008-0000-1000-8000-00805F9B34FB;IP_PROTOCOL_UUID=00000009-0000-1000-8000-0

46、0805F9B34FB;FTP_PROTOCOL_UUID = 0000000A-0000-1000-8000-00805F9B34FB;HTTP_PROTOCOL_UUID=0000000C-0000-1000-8000-00805F9B34FB;WSP_PROTOCOL_UUID=0000000E-0000-1000-8000-00805F9B34FB;BNEP_PROTOCOL_UUID=0000000F-0000-1000-8000-00805F9B34FB;UPNP_PROTOCOL_UUID=00000010-0000-1000-8000-00805F9B34FB;HID_PROT

47、OCOL_UUID = 00000011-0000-1000-8000-00805F9B34FB;HCCC_PROTOCOL_UUID=00000012-0000-1000-8000-00805F9B34FB;HCDC_PROTOCOL_UUID=00000014-0000-1000-8000-00805F9B34FB;HN_PROTOCOL_UUID=00000016-0000-1000-8000-00805F9B34FB;AVCTP_PROTOCOL_UUID = 00000017-0000-1000-8000-00805F9B34FB;AVDTP_PROTOCOL_UUID=000000

48、19-0000-1000-8000-00805F9B34FB;CMPT_PROTOCOL_UUID=0000001B-0000-1000-8000-00805F9B34FB;UDI_C_PLANE_PROTOCOL_UUID =0000001D-0000-1000-8000-00805F9B34FB;L2CAP_PROTOCOL_UUID = 00000100-0000-1000-8000-00805F9B34FB;Ref. Service class IDs /assig ned-nu mbers/sdp.htmServiceDiscoveryS

49、erverServiceClasslD_UUID =00001000-0000-1000-8000-00805F9B34FB;BrowseGroupDescriptorServiceClassID_UUID=00001001-0000-1000-8000-00805F9B34FB;PublicBrowseGroupServiceClass_UUID=00001002-0000-1000-8000-00805F9B34FB;SerialPortServiceClass_UUID=00001101-0000-1000-8000-00805F9B34FB;LANAccessUsi ngPPPServ

50、iceClass_UUID=00001102-0000-1000-8000-00805F9B34FB;DialupNetworki ngServiceClass_UUID=00001103-0000-1000-8000-00805F9B34FB;IrMCSy ncServiceClass_UUID00001104-0000-1000-8000-00805F9B34FB;OBEXObjectPushServiceClass_UUID00001105-0000-1000-8000-00805F9B34FB;OBEXFileTra nsferServiceClass_UUID00001106-000

51、0-1000-8000-00805F9B34FB;IrMCS yn cComma ndServiceClass_UUID00001107-0000-1000-8000-00805F9B34FB;HeadsetServiceClass_UUID00001108-0000-1000-8000-00805F9B34FB;CordlessTelephonyServiceClass_UUID 00001109-0000-1000-8000-00805F9B34FB;AudioSourceServiceClass_UUID0000110A-0000-1000-8000-00805F9B34FB;Audio

52、Si nkServiceClass_UUID0000110B-0000-1000-8000-00805F9B34FB;AVRemoteControlTargetServiceClass_UUID 0000110C-0000-1000-8000-00805F9B34FB; AdvancedAudioDistributionServiceClass_UUID0000110D-0000-1000-8000-00805F9B34FB;AVRemoteCo ntrolServiceClass_UUID0000110E-0000-1000-8000-00805F9B34FB;VideoConferenci

53、ngServiceClass_UUID 0000110F-0000-1000-8000-00805F9B34FB;In tercomServiceClass_UUID00001110-0000-1000-8000-00805F9B34FB; FaxServiceClass_UUID =00001111-0000-1000-8000-00805F9B34FB;HeadsetAudioGatewayServiceClass_UUID00001112-0000-1000-8000-00805F9B34FB; WAPServiceClass_UUID:00001113-0000-1000-8000-0

54、0805F9B34FB;WAPClie ntServiceClass_UUID00001114-0000-1000-8000-00805F9B34FB;PANUServiceClass_UUID00001115-0000-1000-8000-00805F9B34FB; NAPServiceClass_UUID=00001116-0000-1000-8000-00805F9B34FB; GNServiceClass_UUID =00001117-0000-1000-8000-00805F9B34FB;DirectPri ntin gServiceClass_UUID 00001118-0000-

55、1000-8000-00805F9B34FB;Refere ncePri nti ngServiceClass_UUID00001119-0000-1000-8000-00805F9B34FB;Imagi ngServiceClass_UUID=0000111A-0000-1000-8000-00805F9B34FB;Imagi ngResp on derServiceClass_UUID=0000111B-0000-1000-8000-00805F9B34FB;Imagi ngAutomaticArchiveServiceClass_UUID0000111C-0000-1000-8000-0

56、0805F9B34FB;Imagi ngRefere nceObjectsServiceClass_UUID0000111D-0000-1000-8000-00805F9B34FB;Han dsfreeServiceClass_UUID=0000111E-0000-1000-8000-00805F9B34FB;Han dsfreeAudioGatewayServiceClass_UUID0000111F-0000-1000-8000-00805F9B34FB;DirectPri nti ngRefere nceObjectsServiceClass_UUID =00001120-0000-10

57、00-8000-00805F9B34FB;ReflectedUIServiceClass_UUID=00001121-0000-1000-8000-00805F9B34FB;BasicPri ngin gServiceClass_UUID=00001122-0000-1000-8000-00805F9B34FB;Printin gStatusServiceClass_UUID=00001123-0000-1000-8000-00805F9B34FB;Huma nln terfaceDeviceServiceClass_UUID:00001124-0000-1000-8000-00805F9B3

58、4FB;HardcopyCableReplaceme ntServiceClass_UUID00001125-0000-1000-8000-00805F9B34FB;HCRPri ntServiceClass_UUID=00001126-0000-1000-8000-00805F9B34FB;HCRSca nServiceClass_UUID=00001127-0000-1000-8000-00805F9B34FB;Commo nlSDNAccessServiceClass_UUID00001128-0000-1000-8000-00805F9B34FB;VideoCo nferen ci n

59、gGWServiceClass_UUID00001129-0000-1000-8000-00805F9B34FB;UDIMTServiceClass_UUID=0000112A-0000-1000-8000-00805F9B34FB;UDITAServiceClass_UUID=0000112B-0000-1000-8000-00805F9B34FB;AudioVideoServiceClass_UUID=0000112C-0000-1000-8000-00805F9B34FB; PnPIn formatio nServiceClass_UUID=00001200-0000-1000-8000

60、-00805F9B34FB;Gen ericNetworki ngServiceClass_UUID=00001201-0000-1000-8000-00805F9B34FB;Gen ericFileTra nsferServiceClass_UUID=00001202-0000-1000-8000-00805F9B34FB;Gen ericAudioServiceClass_UUID 00001203-0000-1000-8000-00805F9B34FB;Gen ericAudioServiceClass_UUID 00001203-0000-1000-8000-00805F9B34FB;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論