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