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

下載本文檔

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

文檔簡介

1、Android平臺(tái)支持藍(lán)牙網(wǎng)絡(luò)協(xié)議棧,實(shí)現(xiàn)藍(lán)牙設(shè)備之間數(shù)據(jù)的無線傳輸。本文檔描述了怎樣利用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)牙連接的所需要的一些基本類: BluetoothAdapter類:代表了一個(gè)本地的藍(lán)牙適配器。他是所有藍(lán)牙交互的的入口點(diǎn)。利用它你可以發(fā)現(xiàn)其他藍(lán)牙設(shè)備,查詢綁定了的設(shè)備,使用已知的MAC地址實(shí)例化一個(gè)藍(lán)牙設(shè)備和建立一個(gè)BluetoothServerSocket(作為服務(wù)器端)來監(jiān)聽來自其他設(shè)備的連接。 BluetoothD

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

3、bluetoothsocket。 Bluetoothclass類:描述了一個(gè)藍(lán)牙設(shè)備的一般特點(diǎn)和能力。他的只讀屬性集定義了設(shè)備的主、次設(shè)備類和一些相關(guān)服務(wù)。然而,他并沒有準(zhǔn)確的描述所有該設(shè)備所支持的藍(lán)牙文件和服務(wù),而是作為對設(shè)備種類來說的一個(gè)小小暗示。下面說說具體的編程實(shí)現(xiàn):首先,要操作藍(lán)牙,先要在AndroidManifest.xml里加入權(quán)限<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /><uses-permissionandroid:name="andr

4、oid.permission.BLUETOOTH" />其次,必須確定你的設(shè)備支持藍(lán)牙,并保證他可以用。如果你的設(shè)備支持藍(lán)牙,將它使能。當(dāng)然,有兩種方法,一種是在你的系統(tǒng)設(shè)置里開啟藍(lán)牙,另外一中是在你的應(yīng)用程序里啟動(dòng)藍(lán)牙功能,第一種方法就不講了,具體講一個(gè)第二種方法: 首先通過調(diào)用靜態(tài)方法getDefaultAdapter()獲取藍(lán)牙適配器bluetoothadapter,以后你就可以使用該對象了。如果返回為空,the story is over。BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAd

5、apter();if (mBluetoothAdapter = null) / Device does not support Bluetooth其次,調(diào)用isEnabled()來查詢當(dāng)前藍(lán)牙設(shè)備的狀態(tài),如果返回為false,則表示藍(lán)牙設(shè)備沒有開啟,接下來你需要封裝一個(gè)ACTION_REQUEST_ENABLE請求到intent里面,調(diào)用startActivityForResult()方法使能藍(lán)牙設(shè)備,例如:if (!mBluetoothAdapter.isEnabled() Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_

6、REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 至此,如不出意外,恭喜你的藍(lán)牙設(shè)備已經(jīng)開啟了,接下來需要查找周邊可能存在的藍(lán)牙設(shè)備了。查找設(shè)備: 使用bluetoothadapter類里的方法,你可以查找遠(yuǎn)端設(shè)備(不過藍(lán)牙查找的范圍好像是在十米以內(nèi)吧)或者查詢在你手機(jī)上已經(jīng)匹配(或者說綁定)的其他手機(jī)了。當(dāng)然需要確定對方藍(lán)牙設(shè)備已經(jīng)開啟或者已經(jīng)開啟了“被發(fā)現(xiàn)使能“功能(對方設(shè)備是可以被發(fā)現(xiàn)的是你能夠發(fā)起連接的前提條件)。如果該設(shè)備是可以被發(fā)現(xiàn)的,會(huì)反饋回來一些對方的設(shè)備信息,比如名字、MAC

7、地址等,利用這些信息,你的設(shè)備就可以選擇去向?qū)Ψ匠跏蓟粋€(gè)連接。如果你是第一次與該設(shè)備連接,那么一個(gè)配對的請求就會(huì)自動(dòng)的顯示給用戶。當(dāng)設(shè)備配對好之后,他的一些基本信息(主要是名字和MAC)被保存下來并可以使用藍(lán)牙的API來讀取。使用已知的MAC地址就可以對遠(yuǎn)端的藍(lán)牙設(shè)備發(fā)起連接請求。 匹配好的設(shè)備和連接上的設(shè)備的不同點(diǎn):匹配好只是說明對方設(shè)備發(fā)現(xiàn)了你的存在,并擁有一個(gè)共同的識別碼,并且可以連接。連接上:表示當(dāng)前設(shè)備共享一個(gè)RFCOMM信道并且兩者之間可以交換數(shù)據(jù)。也就是是說藍(lán)牙設(shè)備在建立RFCOMM信道之前,必須是已經(jīng)配對好了的。怎么查詢匹配好的設(shè)備: 在建立連接之前你必須先查詢配對好了的藍(lán)牙

8、設(shè)備集(你周圍的藍(lán)牙設(shè)備可能不止一個(gè)),以便你選取哪一個(gè)設(shè)備進(jìn)行通信,例如你可以你可以查詢所有配對的藍(lán)牙設(shè)備,并使用一個(gè)數(shù)組適配器將其打印顯示出來: Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();/ If there are paired devicesif (pairedDevices.size() > 0) / Loop through paired devices for (BluetoothDevice device : pairedDevices) / Add th

9、e name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + "/n" + device.getAddress(); 建立一個(gè)藍(lán)牙連接只需要MAC地址就已經(jīng)足夠了。掃描設(shè)備: 掃描設(shè)備,只需要簡單的調(diào)用startDiscovery()方法,這個(gè)掃描的過程大概持續(xù)是12秒,應(yīng)用程序?yàn)榱薃CTION_FOUND動(dòng)作需要注冊一個(gè)BroadcastReceiver來接受設(shè)備掃描到的信息。對于每一個(gè)設(shè)備,系統(tǒng)都會(huì)廣播ACTION_FOUND動(dòng)作。例如:

10、 / Create a BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() public void onReceive(Context context, Intent intent) String action = intent.getAction(); / When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action) / Get the Blueto

11、othDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); / Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + "/n" + device.getAddress(); ;/ Register the BroadcastReceiverIntentFi

12、lter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter); / Don't forget to unregister during onDestroy注意:掃描的過程是一個(gè)很耗費(fèi)資源的過程,一旦你找到你需要的設(shè)備之后,在發(fā)起連接請求之前,確保你的程序調(diào)用cancelDiscovery()方法停止掃描。顯然,如果你已經(jīng)連接上一個(gè)設(shè)備,啟動(dòng)掃描會(huì)減少你的通信帶寬。 使能被發(fā)現(xiàn):Enabling discoverability 如果你想使你的設(shè)備能夠被其他設(shè)

13、備發(fā)現(xiàn),將ACTION_REQUEST_DISCOVERABLE動(dòng)作封裝在intent中并調(diào)用startActivityForResult(Intent, int)方法就可以了。他將在不使你應(yīng)用程序退出的情況下使你的設(shè)備能夠被發(fā)現(xiàn)。缺省情況下的使能時(shí)間是120秒,當(dāng)然你可以可以通過添加EXTRA_DISCOVERABLE_DURATION字段來改變使能時(shí)間(最大不超過300秒,這是出于對你設(shè)備上的信息安全考慮)。例如:Intent discoverableIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);disco

14、verableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);運(yùn)行該段代碼之后,系統(tǒng)會(huì)彈出一個(gè)對話框來提示你啟動(dòng)設(shè)備使能被發(fā)現(xiàn)(次過程中如果你的藍(lán)牙功能沒有開啟,系統(tǒng)會(huì)幫你開啟),并且如果你準(zhǔn)備對該遠(yuǎn)端設(shè)備發(fā)現(xiàn)一個(gè)連接,你不需要開啟使能設(shè)備被發(fā)現(xiàn)功能,因?yàn)樵摴δ苤皇窃谀愕膽?yīng)用程序作為服務(wù)器端的時(shí)候才需要。連接設(shè)備: 在你的應(yīng)用程序中,想建立兩個(gè)藍(lán)牙設(shè)備之間的連接,你必須實(shí)現(xiàn)客戶端和服務(wù)器端的代碼(因?yàn)槿魏我粋€(gè)設(shè)備都必須可以作為服務(wù)端或者客戶端

15、)。一個(gè)開啟服務(wù)來監(jiān)聽,一個(gè)發(fā)起連接請求(使用服務(wù)器端設(shè)備的MAC地址)。當(dāng)他們都擁有一個(gè)藍(lán)牙套接字在同一RFECOMM信道上的時(shí)候,可以認(rèn)為他們之間已經(jīng)連接上了。服務(wù)端和客戶端通過不同的方式或者他們的藍(lán)牙套接字。當(dāng)一個(gè)連接監(jiān)聽到的時(shí)候,服務(wù)端獲取到藍(lán)牙套接字。當(dāng)客戶可打開一個(gè)FRCOMM信道給服務(wù)器端的時(shí)候,客戶端獲取到藍(lán)牙套接字。 注意:在此過程中,如果兩個(gè)藍(lán)牙設(shè)備還沒有配對好的,android系統(tǒng)會(huì)通過一個(gè)通知或者對話框的形式來通知用戶。RFCOMM連接請求會(huì)在用戶選擇之前阻塞。當(dāng)你想要連接兩臺(tái)設(shè)備時(shí),一個(gè)必須作為服務(wù)端(通過持有一個(gè)打開的bluetoothserversocket),目

16、的是監(jiān)聽外來連接請求,當(dāng)監(jiān)聽到以后提供一個(gè)連接上的bluetoothsocket給客戶端,當(dāng)客戶端從bluetoothserversocket得到bluetoothsocket以后就可以銷毀bluetoothserversocket,除非你還想監(jiān)聽更多的連接請求。 建立服務(wù)套接字和監(jiān)聽連接的基本步驟: 首先通過調(diào)用listenUsingRfcommWithServiceRecord(String, UUID)方法來獲取bluetoothserversocket對象,參數(shù)string代表了該服務(wù)的名稱,UUID代表了和客戶端連接的一個(gè)標(biāo)識(128位格式的字符串ID,相當(dāng)于pin碼),UUID必須

17、雙方匹配才可以建立連接。其次調(diào)用accept()方法來監(jiān)聽可能到來的連接請求,當(dāng)監(jiān)聽到以后,返回一個(gè)連接上的藍(lán)牙套接字bluetoothsocket。最后,在監(jiān)聽到一個(gè)連接以后,需要調(diào)用close()方法來關(guān)閉監(jiān)聽程序。(一般藍(lán)牙設(shè)備之間是點(diǎn)對點(diǎn)的傳輸)注意:accept()方法不應(yīng)該放在主Acitvity里面,因?yàn)樗且环N阻塞調(diào)用(在沒有監(jiān)聽到連接請求之間程序就一直停在那里)。解決方法是新建一個(gè)線程來管理。例如: private class AcceptThread extends Thread private final BluetoothServerSocket mmServerSock

18、et; public AcceptThread() / Use a temporary object that is later assigned to mmServerSocket, / because mmServerSocket is final BluetoothServerSocket tmp = null; try / MY_UUID is the app's UUID string, also used by the client code tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);

19、catch (IOException e) mmServerSocket = tmp; public void run() BluetoothSocket socket = null; / Keep listening until exception occurs or a socket is returned while (true) try socket = mmServerSocket.accept(); catch (IOException e) break; / If a connection was accepted if (socket != null) / Do work to

20、 manage the connection (in a separate thread) manageConnectedSocket(socket); mmServerSocket.close(); break; /* Will cancel the listening socket, and cause the thread to finish */ public void cancel() try mmServerSocket.close(); catch (IOException e) 客戶端的連接: 為了初始化一個(gè)與遠(yuǎn)端設(shè)備的連接,需要先獲取代表該設(shè)備的一個(gè)bluetoothdevi

21、ce對象。通過bluetoothdevice對象來獲取bluetoothsocket并初始化連接: 具體步驟: 使用bluetoothdevice對象里的方法createRfcommSocketToServiceRecord(UUID)來獲取bluetoothsocket。UUID就是匹配碼。然后,調(diào)用connect()方法來。如果遠(yuǎn)端設(shè)備接收了該連接,他們將在通信過程中共享RFFCOMM信道,并且connect()方法返回。例如: private class ConnectThread extends Thread private final BluetoothSocket mmSocket

22、; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) / Use a temporary object that is later assigned to mmSocket, / because mmSocket is final BluetoothSocket tmp = null; mmDevice = device; / Get a BluetoothSocket to connect with the given BluetoothDevice try / MY_UU

23、ID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID); catch (IOException e) mmSocket = tmp; public void run() / Cancel discovery because it will slow down the connection mAdapter.cancelDiscovery(); try / Connect the device through the

24、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(); catch (IOException closeException) return; / Do work to manage the connection (in a separate thread) man

25、ageConnectedSocket(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ú)立的線程中來調(diào)用該方法。在設(shè)備discover過程中不應(yīng)該發(fā)起連接connect(),這樣會(huì)明顯減慢速度以至于連接失敗。且數(shù)據(jù)傳輸完成只有調(diào)用close()方法來關(guān)閉連接,這樣可以節(jié)省系統(tǒng)內(nèi)部資源。管理連接(主要涉及數(shù)據(jù)的

26、傳輸): 當(dāng)設(shè)備連接上以后,每個(gè)設(shè)備都擁有各自的bluetoothsocket?,F(xiàn)在你就可以實(shí)現(xiàn)設(shè)備之間數(shù)據(jù)的共享了。1.首先通過調(diào)用getInputStream()和getOutputStream()方法來獲取輸入輸出流。然后通過調(diào)用read(byte) 和 write(byte).方法來讀取或者寫數(shù)據(jù)。2.實(shí)現(xiàn)細(xì)節(jié):因?yàn)樽x取和寫操作都是阻塞調(diào)用,需要建立一個(gè)專用線程來管理。3. private class ConnectedThread extends Thread private final BluetoothSocket mmSocket; private final InputStr

27、eam mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; / Get the input and output streams, using temp objects because / member streams are final try tmpIn = socket.getInputStream(

28、); tmpOut = socket.getOutputStream(); catch (IOException e) mmInStream = tmpIn; mmOutStream = tmpOut; public void run() byte buffer = new byte1024; / buffer store for the stream int bytes; / bytes returned from read() / Keep listening to the InputStream until an exception occurs while (true) try / R

29、ead from the InputStream bytes = mmInStream.read(buffer); / Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) .sendToTarget(); catch (IOException e) break; /* Call this from the main Activity to send data to the remote device */ public void write(byte

30、 bytes) try mmOutStream.write(bytes); catch (IOException e) /* Call this from the main Activity to shutdown the connection */ public void cancel() try mmSocket.close(); catch (IOException e) Android藍(lán)牙UUIDandroid 藍(lán)牙UUID,藍(lán)牙開發(fā)必備居家良藥。 ServiceDiscoveryServerServiceClassID_UUID = '00001000-0000-1

31、000-8000-00805F9B34FB' BrowseGroupDescriptorServiceClassID_UUID = '00001001-0000-1000-8000-00805F9B34FB' PublicBrowseGroupServiceClass_UUID = '00001002-0000-1000-8000-00805F9B34FB' #藍(lán)牙串口服務(wù) SerialPortServiceClass_UUID = '00001101-0000-1000-8000-00805F9B34FB

32、' LANAccessUsingPPPServiceClass_UUID = '00001102-0000-1000-8000-00805F9B34FB' #撥號網(wǎng)絡(luò)服務(wù) DialupNetworkingServiceClass_UUID = '00001103-0000-1000-8000-00805F9B34FB' #信息同步服務(wù) IrMCSyncServiceClass_UUID = '00001104-0000-1000-8000-00805F9B34FB' SDP_OB

33、EXObjectPushServiceClass_UUID = '00001105-0000-1000-8000-00805F9B34FB' #文件傳輸服務(wù) OBEXFileTransferServiceClass_UUID = '00001106-0000-1000-8000-00805F9B34FB' IrMCSyncCommandServiceClass_UUID = '00001107-0000-1000-8000-00805F9B34FB' SDP_HeadsetServiceClass_UUID

34、 = '00001108-0000-1000-8000-00805F9B34FB' CordlessTelephonyServiceClass_UUID = '00001109-0000-1000-8000-00805F9B34FB' SDP_AudioSourceServiceClass_UUID = '0000110A-0000-1000-8000-00805F9B34FB' SDP_AudioSinkServiceClass_UUID = '0000110B-0000-1000-8000-00805F9

35、B34FB' SDP_AVRemoteControlTargetServiceClass_UUID = '0000110C-0000-1000-8000-00805F9B34FB' SDP_AdvancedAudioDistributionServiceClass_UUID = '0000110D-0000-1000-8000-00805F9B34FB' SDP_AVRemoteControlServiceClass_UUID = '0000110E-0000-1000-8000-00805F9B34FB'&

36、#160;VideoConferencingServiceClass_UUID = '0000110F-0000-1000-8000-00805F9B34FB' IntercomServiceClass_UUID = '00001110-0000-1000-8000-00805F9B34FB' #藍(lán)牙傳真服務(wù) FaxServiceClass_UUID = '00001111-0000-1000-8000-00805F9B34FB' HeadsetAudioGatewayServiceClass_UUID =

37、 '00001112-0000-1000-8000-00805F9B34FB' WAPServiceClass_UUID = '00001113-0000-1000-8000-00805F9B34FB' WAPClientServiceClass_UUID = '00001114-0000-1000-8000-00805F9B34FB' #個(gè)人局域網(wǎng)服務(wù) PANUServiceClass_UUID = '00001115-0000-1000-8000-00805F9B34FB' #

38、個(gè)人局域網(wǎng)服務(wù) NAPServiceClass_UUID = '00001116-0000-1000-8000-00805F9B34FB' #個(gè)人局域網(wǎng)服務(wù) GNServiceClass_UUID = '00001117-0000-1000-8000-00805F9B34FB' DirectPrintingServiceClass_UUID = '00001118-0000-1000-8000-00805F9B34FB' ReferencePrintingServiceClass_UUID = &

39、#39;00001119-0000-1000-8000-00805F9B34FB' ImagingServiceClass_UUID = '0000111A-0000-1000-8000-00805F9B34FB' ImagingResponderServiceClass_UUID = '0000111B-0000-1000-8000-00805F9B34FB' ImagingAutomaticArchiveServiceClass_UUID = '0000111C-0000-1000-8000-00805F9B34

40、FB' ImagingReferenceObjectsServiceClass_UUID = '0000111D-0000-1000-8000-00805F9B34FB' SDP_HandsfreeServiceClass_UUID = '0000111E-0000-1000-8000-00805F9B34FB' HandsfreeAudioGatewayServiceClass_UUID = '0000111F-0000-1000-8000-00805F9B34FB' DirectPrinting

41、ReferenceObjectsServiceClass_UUID = '00001120-0000-1000-8000-00805F9B34FB' ReflectedUIServiceClass_UUID = '00001121-0000-1000-8000-00805F9B34FB' BasicPringingServiceClass_UUID = '00001122-0000-1000-8000-00805F9B34FB' PrintingStatusServiceClass_UUID = '00001

42、123-0000-1000-8000-00805F9B34FB' #人機(jī)輸入服務(wù) HumanInterfaceDeviceServiceClass_UUID = '00001124-0000-1000-8000-00805F9B34FB' HardcopyCableReplacementServiceClass_UUID = '00001125-0000-1000-8000-00805F9B34FB' #藍(lán)牙打印服務(wù) HCRPrintServiceClass_UUID = '00001126-00

43、00-1000-8000-00805F9B34FB' HCRScanServiceClass_UUID = '00001127-0000-1000-8000-00805F9B34FB' CommonISDNAccessServiceClass_UUID = '00001128-0000-1000-8000-00805F9B34FB' VideoConferencingGWServiceClass_UUID = '00001129-0000-1000-8000-00805F9B34FB' UDIMTS

44、erviceClass_UUID = '0000112A-0000-1000-8000-00805F9B34FB' UDITAServiceClass_UUID = '0000112B-0000-1000-8000-00805F9B34FB' AudioVideoServiceClass_UUID = '0000112C-0000-1000-8000-00805F9B34FB' SIMAccessServiceClass_UUID = '0000112D-0000-1000-8000-00805F9B34FB

45、' PnPInformationServiceClass_UUID = '00001200-0000-1000-8000-00805F9B34FB' GenericNetworkingServiceClass_UUID = '00001201-0000-1000-8000-00805F9B34FB' GenericFileTransferServiceClass_UUID = '00001202-0000-1000-8000-00805F9B34FB' GenericAudioServiceClas

46、s_UUID = '00001203-0000-1000-8000-00805F9B34FB' GenericTelephonyServiceClass_UUID = '00001204-0000-1000-8000-00805F9B34FB' = 今天找了一下 關(guān)於 Bluetooth 的標(biāo)準(zhǔn) Service/Profile 的 UUID ,但是看了一下 Specification Doucments 都只有 16bits 長,這是所謂的UUID16格式 後來才了解,原來Bluetooth 將UUID 的部份固定,只取1

47、6bits 作為各種 Service 的區(qū)分,這樣可以節(jié)省分析 SDP Record and 與程式空間,避免增加 Bluetooth Device 的成本。 地下的值可以從 windows XP or Server 2003 SDK 的 bt_sdp.h or BlueZ 的 sdp.h(UUID16) 中找到定義,可以觀察出 下列的固定序列除了替換 XXXX部份 '0000xxxx-0000-1000-8000-00805F9B34FB',而XXXX 部份就是 所謂的 UUID16 定義。 Protocols UUID http:/www.bl

48、/assigned-numbers/sdp.htm BASE UUID 00000000-0000-1000-8000-00805F9B34FB SDP_PROTOCOL_UUID         = '00000001-0000-1000-8000-00805F9B34FB' UDP_PROTOCOL_UUID         = '00000002-0000

49、-1000-8000-00805F9B34FB' RFCOMM_PROTOCOL_UUID      = '00000003-0000-1000-8000-00805F9B34FB' TCP_PROTOCOL_UUID         = '00000004-0000-1000-8000-00805F9B34FB' TCSBIN_PROTOCOL_UUID   

50、60;  = '00000005-0000-1000-8000-00805F9B34FB' TCSAT_PROTOCOL_UUID       = '00000006-0000-1000-8000-00805F9B34FB' OBEX_PROTOCOL_UUID        = '00000008-0000-1000-8000-00805F9B34FB' IP_PROTOCOL

51、_UUID          = '00000009-0000-1000-8000-00805F9B34FB' FTP_PROTOCOL_UUID         = '0000000A-0000-1000-8000-00805F9B34FB' HTTP_PROTOCOL_UUID        = 

52、9;0000000C-0000-1000-8000-00805F9B34FB' WSP_PROTOCOL_UUID         = '0000000E-0000-1000-8000-00805F9B34FB' BNEP_PROTOCOL_UUID        = '0000000F-0000-1000-8000-00805F9B34FB' UPNP_PROTOCOL_UU

53、ID        = '00000010-0000-1000-8000-00805F9B34FB' HID_PROTOCOL_UUID         = '00000011-0000-1000-8000-00805F9B34FB' HCCC_PROTOCOL_UUID        = '00000012-0000

54、-1000-8000-00805F9B34FB' HCDC_PROTOCOL_UUID        = '00000014-0000-1000-8000-00805F9B34FB' HN_PROTOCOL_UUID          = '00000016-0000-1000-8000-00805F9B34FB' AVCTP_PROTOCOL_UUID &

55、#160;     = '00000017-0000-1000-8000-00805F9B34FB' AVDTP_PROTOCOL_UUID       = '00000019-0000-1000-8000-00805F9B34FB' CMPT_PROTOCOL_UUID        = '0000001B-0000-1000-8000-00805F9B34FB&#

56、39; UDI_C_PLANE_PROTOCOL_UUID = '0000001D-0000-1000-8000-00805F9B34FB' L2CAP_PROTOCOL_UUID       = '00000100-0000-1000-8000-00805F9B34FB' Ref. Service class IDs /assigned-numbers/sdp.htm ServiceDiscoveryServerSe

57、rviceClassID_UUID       = '00001000-0000-1000-8000-00805F9B34FB' BrowseGroupDescriptorServiceClassID_UUID        = '00001001-0000-1000-8000-00805F9B34FB' PublicBrowseGroupServiceClass_UUID   

58、60;          = '00001002-0000-1000-8000-00805F9B34FB' SerialPortServiceClass_UUID                     = '00001101-0000-1000-8000-00805F9B3

59、4FB' LANAccessUsingPPPServiceClass_UUID              = '00001102-0000-1000-8000-00805F9B34FB' DialupNetworkingServiceClass_UUID               =

60、 '00001103-0000-1000-8000-00805F9B34FB' IrMCSyncServiceClass_UUID                       = '00001104-0000-1000-8000-00805F9B34FB' OBEXObjectPushServiceClass_UUID

61、0;                = '00001105-0000-1000-8000-00805F9B34FB' OBEXFileTransferServiceClass_UUID               = '00001106-0000-1000-8000-0080

62、5F9B34FB' IrMCSyncCommandServiceClass_UUID                = '00001107-0000-1000-8000-00805F9B34FB' HeadsetServiceClass_UUID             &#

63、160;          = '00001108-0000-1000-8000-00805F9B34FB' CordlessTelephonyServiceClass_UUID              = '00001109-0000-1000-8000-00805F9B34FB' AudioSourceServiceCl

64、ass_UUID                    = '0000110A-0000-1000-8000-00805F9B34FB' AudioSinkServiceClass_UUID                &

65、#160;     = '0000110B-0000-1000-8000-00805F9B34FB' AVRemoteControlTargetServiceClass_UUID          = '0000110C-0000-1000-8000-00805F9B34FB' AdvancedAudioDistributionServiceClass_UUID    

66、60; = '0000110D-0000-1000-8000-00805F9B34FB' AVRemoteControlServiceClass_UUID                = '0000110E-0000-1000-8000-00805F9B34FB' VideoConferencingServiceClass_UUID     &

67、#160;        = '0000110F-0000-1000-8000-00805F9B34FB' IntercomServiceClass_UUID                       = '00001110-0000-1000-8000-00805F9B34FB' FaxServiceClass_UUID                            = '00001111-0000-1000-8000-00805F9B34FB' HeadsetAudioGat

溫馨提示

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

最新文檔

評論

0/150

提交評論