安卓藍芽開發相關

2021-07-26 19:57:46 字數 4417 閱讀 2191

對於一般的軟體開發人員來說,藍芽是很少用到的,尤其是

android

的藍芽開發,國內的例子很少

android

對於藍芽開發從

2.0版本的

sdk才開始支援,而且模擬器不支援,測試至少需要兩部手機,所以制約了很多技術人員的開發,剛巧這段時間公司有藍芽開發的需求,我看了很多國內、國外的資料,又研究了一下

j2me

的藍芽開發(為了找找思路),雖然我想要的功能還沒實現(我曾經在很多論壇裡問了很多遍,苦於沒有高人解答

..),我要實現的功能是連線乙個硬體裝置,凡是跟硬體沾上邊的,都讓軟體人員開發頭疼..

好了,廢話不說了,鑑於很多開發人員現在也有藍芽開發的需求,也為了大家少走些彎路,先將我積攢的一點點在android藍芽開發經驗與大家分享一下!

首先,要操作藍芽,先要在androidmanifest.xml裡加入許可權

然後,看下api,

android

所有關於藍芽開發的類都在android.bluetooth包下,如下圖,只有8個類

而我們需要用到了就只有幾個而已:

1.bluetoothadapter 

顧名思義,藍芽介面卡,直到我們建立bluetoothsocket連線之前,都要不斷操作它

bluetoothadapter

裡的方法很多,常用的有以下幾個:

canceldiscovery() 

disable()

關閉藍芽

enable()

開啟藍芽,這個方法開啟藍芽不會彈出提示,更多的時候我們需要問下使用者是否開啟,一下這兩行**同樣是開啟藍芽,不過會提示使用者:

intemtenabler=new intent(bluetoothadapter.action_request_enable);

startactivityforresult(enabler,recode);//

同startactivity(enabler);

getaddress()

獲取本地藍芽位址

getdefaultadapter()

獲取預設bluetoothadapter,實際上,也只有這一種方法獲取bluetoothadapter

getname()

獲取本地藍芽名稱

getremotedevice(string address)

根據藍芽位址獲取遠端藍芽裝置

getstate()

獲取本地藍芽介面卡當前狀態(感覺可能除錯的時候更需要)

isdiscovering()

判斷當前是否正在查詢裝置,是返回true

isenabled()

判斷藍芽是否開啟,已開啟返回true,否則,返回false

listenusingrfcommwithservicerecord(string name,uuid uuid)

根據名稱,uuid建立並返回bluetoothserversocket,這是建立bluetoothsocket伺服器端的第一步

startdiscovery()

開始搜尋,這是搜尋的第一步

2.bluetoothdevice

看名字就知道,這個類描述了乙個藍芽裝置

createrfcommsockettoservicerecord(uuiduuid)

根據uuid建立並返回乙個bluetoothsocket

這個方法也是我們獲取bluetoothdevice的目的——建立bluetoothsocket

這個類其他的方法,如getaddress(),getname(),同bluetoothadapter

3.bluetoothserversocket

如果去除了bluetooth相信大家一定再熟悉不過了,既然是socket,方法就應該都差不多,

這個類一種只有三個方法

兩個過載的accept(),accept(inttimeout)兩者的區別在於後面的方法指定了過時時間,需要注意的是,執行這兩個方法的時候,直到接收到了客戶端的請求(或是過期之後),都會阻塞執行緒,應該放在新執行緒裡執行!

還有一點需要注意的是,這兩個方法都返回乙個bluetoothsocket,最後的連線也是伺服器端與客戶端的兩個bluetoothsocket的連線

close()

這個就不用說了吧,翻譯一下——關閉!

4.bluetoothsocket,

跟bluetoothserversocket相對,是客戶端

一共5個方法,不出意外,都會用到

close(),

關閉connect()

連線getinptustream()

獲取輸入流

getoutputstream()

獲取輸出流

getremotedevice()

獲取遠端裝置,這裡指的是獲取bluetoothsocket指定連線的那個遠端藍芽裝置

1、獲取本地藍芽介面卡

bluetoothadapter

madapter= bluetoothadapter.getdefaultadapter();

2、開啟藍芽

if(!madapter.isenabled())

3、搜尋裝置

1)剛才說過了madapter.startdiscovery()

是第一步,可以你會發現沒有返回的藍芽裝置,怎麼知道查詢到了呢?向下看,不要急

2)定義broadcastreceiver,關於broadcastreceiver不多講了,不是今天的討論內容,**如下

broadcastreceiver mreceiver = new broadcastreceiver() }

//搜尋完成

else if (bluetoothadapter.action_discovery_finished

.equals(action)) }

//執行更新列表的** }

};這樣,沒當查詢到新裝置或是搜尋完成,相應的操作都在上段**的兩個if裡執行了,不過前提是你要先註冊

broadcastreceiver

,具體**如下

intentfilter filter = new intentfilter(bluetoothdevice.action_found);

registerreceiver(mreceiver, filter);

filter = new intentfilter(bluetoothadapter.action_discovery_finished);

registerreceiver(mreceiver, filter);

(這段**,一般寫在oncreate()裡..)

3建立連線,首先android sdk(2.0以上版本)支援的藍芽連線是通過bluetoothsocket建立連線(說的不對請高人指正),伺服器端(bluetoothserversocket)和客戶端(bluetoothsocket)需指定同樣的uuid,才能建立連線,因為建立連線的方法會阻塞執行緒,所以伺服器端和客戶端都應啟動新執行緒連線

1)伺服器端:

//uuid

格式一般是"******xx-***x-***x-***x-************"可到

// 申請bluetoothserversocket serversocket = madapter. listenusingrfcommwithservicerecord(serversocketname,uuid);

serversocket.accept();

2)客戶端:

//還記得我們剛才在broadcastreceiver獲取了bluetoothdevice麼?

bluetoothsocket cliensocket=dcvice. createrfcommsockettoservicerecord(uuid);

cliensocket.connect();

4、資料傳遞,通過以上操作,就已經建立的bluetoothsocket連線了,資料傳遞無非是通過流的形式

1)獲取流

inputstream = socket.getinputstream();

outputstream = socket.getoutputstream();

2)寫出、讀入

這是基礎的東西,在這就不多贅述了

終於寫完了,這是我這兩天的學習經驗,希望對有藍芽需求的朋友有所幫助!另外,之前我們提過

android.bluetooth

下有8個類,還有4個類沒有用到,那4個類裡定義的都是常量,我也沒用到它們..

最後把我找到的幾個藍芽的例子附在後面,希望從事軟體開發,尤其是android開發的朋友以後多溝通、多分享!

補充一下,使裝置能夠被搜尋

intent enabler = new intent(bluetoothadapter.action_request_discoverable);

startactivityforresult(enabler,request_discoverable);

安卓開發筆記 藍芽開發

一般情況下用預設的藍芽介面卡就好了 private static bluetoothadapter adapter bluetoothadapter.getdefaultadapter 貼幾個常用的方法 開啟藍芽功能 public static void openbluetooth 關閉藍芽功能 p...

關於安卓藍芽開發總結

這幾個星期提出了乙個小專案,於是和團隊日夜加工,大概就是感測器連線51微控制器,51再通過藍芽傳送資訊到手機端。前幾天一直在研究微控制器裡面的程式,這幾天是負責寫安卓客戶端接收的介面,涉及到有關安卓藍芽的開發,仔細學習了下,略有心得,做個總結,新手感悟,望大神指點。注意,這個主要是和微控制器藍芽相連...

安卓 android 開發相關

color red 安卓開發步驟 color 3 更新android的sdk,此時可能需要修改host檔案,讓安卓能找到sdk 4 編寫安卓 並在vdm中測試 5 若要把生成的apk放到真機中測試,還裡要對apk進行打包簽名 color red android sdk 更新失敗,需要修改host檔案...