移動(dòng)開(kāi)發(fā)知識(shí):Android平臺(tái)如何進(jìn)行藍(lán)牙模塊開(kāi)發(fā)(安卓藍(lán)牙模塊開(kāi)發(fā))
現(xiàn)在對(duì)于短距離通信,尤其是一些附加設(shè)備,采用藍(lán)牙通信是一個(gè)很流行的選擇,因此,作為一名移動(dòng)端開(kāi)發(fā)人員,需要掌握藍(lán)牙開(kāi)發(fā)的相關(guān)信息。
那么,都有哪些知識(shí)需要掌握呢?我們一起來(lái)看一下。
一、藍(lán)牙開(kāi)發(fā)的基本組件
在安卓系統(tǒng)中,藍(lán)牙開(kāi)的基本組件有如下幾個(gè):
1、BluetoothAdapter類。這個(gè)類代表本地的藍(lán)牙適配器,也是所有藍(lán)牙交互的入口點(diǎn)。利用該類,可以發(fā)現(xiàn)其它藍(lán)牙設(shè)備,查詢已經(jīng)匹配了的設(shè)備,使用已知的MAC地址實(shí)例化一個(gè)藍(lán)牙設(shè)備從而能夠與該設(shè)備進(jìn)行通信,以及作為服務(wù)器端,建立一個(gè)BluetoothServerSocket,來(lái)監(jiān)聽(tīng)來(lái)自其它設(shè)備的連接。
2、BluetoothDevice類。這個(gè)類代表了一個(gè)遠(yuǎn)端的藍(lán)牙設(shè)備,使用它可以獲取掃描到的藍(lán)牙設(shè)備的各類信息,如名稱、MAC地址、各類和綁定狀態(tài)等。
3、BluetoothSocket類。這個(gè)類代表了一個(gè)藍(lán)牙套接字的接口(類似于TCP),它是應(yīng)用程序通過(guò)輸入、輸出流與其它藍(lán)牙設(shè)備通信的連接點(diǎn)。
4、BluetoothServerSocket類。這個(gè)類代表打開(kāi)服務(wù)連接監(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)求,并且已經(jīng)連接上了的時(shí)候,該類會(huì)返回一個(gè)BluetoothSocket。
5、BluetoothClass類。這個(gè)類是一個(gè)描述類,描述了一個(gè)藍(lán)牙設(shè)備的一般特點(diǎn)和能力。他的只讀屬性集中定義了設(shè)備的主、次類和一些相關(guān)服務(wù)。
二、需要在AndroidManifest.xml里加入什么權(quán)限
使用藍(lán)牙設(shè)備,需要加入
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
這兩個(gè)權(quán)限,在新一點(diǎn)的安卓版本中,為獲取到對(duì)方設(shè)備的名稱,還需要加入以下兩個(gè)權(quán)限。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
三、如何初始化藍(lán)牙設(shè)備并判斷藍(lán)牙是否開(kāi)啟
可以通過(guò)getDefaultAdapter()來(lái)獲取藍(lán)牙適配器BluetoothAdapter,當(dāng)然,如果獲取到的值為空,就說(shuō)明該設(shè)備不支持藍(lán)牙。如果成功了,就后用其中的isEnabled()函數(shù)來(lái)判斷藍(lán)牙是否啟用。
四、如何查找已匹配的設(shè)備
可以使用BluetoothAdapter中的getBondedDevices()來(lái)獲取匹配的設(shè)備集,代碼如下
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
五、建立藍(lán)牙連接需要什么
建立藍(lán)牙連接只需要一個(gè)MAC地址就夠了,掃描到對(duì)方設(shè)備后,可以獲取對(duì)方的MAC地址。掃描設(shè)備使用startDiscovery()方法,在舊一點(diǎn)的版本中,使用startLeScan()進(jìn)行掃描,不過(guò)這個(gè)方法已經(jīng)被放棄了。
掃描到設(shè)備會(huì)拋出ACTION_FOUND動(dòng)作,因此需要注冊(cè)一個(gè)BroadcastReceiver來(lái)接受掃描到的信息。而對(duì)于每一個(gè)掃描設(shè)備都會(huì)拋出一個(gè)ACTION_FOUND動(dòng)作。
如果想建立兩個(gè)設(shè)備之間的連接,還需要實(shí)現(xiàn)客戶端和服務(wù)器端的代碼。一個(gè)持有打開(kāi)的BluetoothServerSocket來(lái)監(jiān)聽(tīng)外來(lái)連接,監(jiān)聽(tīng)到之后返回一個(gè)BluetoothSocket給對(duì)方用于通信。
六、如何進(jìn)行數(shù)據(jù)傳輸
通信通道建立好了之后,雙方都有了各自的BluetoothSocket。然后就可以通過(guò)調(diào)用getInputStream()和getOutputStream()方法來(lái)獲取輸入輸出流。然后通過(guò)read(byte[])和write(byte[])來(lái)讀取和寫(xiě)入數(shù)據(jù)。
注意一點(diǎn)哦,讀取和寫(xiě)入,都是阻塞行為,所以需要新起一個(gè)線程。
以上就是安卓開(kāi)發(fā)藍(lán)牙設(shè)備的方法哦,大家學(xué)會(huì)了嗎?