android藍芽開發那點事

2021-07-02 13:24:53 字數 4415 閱讀 3075

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

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);

ANDROID 登入的那點事

登入的時候給使用者很好的響應,廢話不多說上 並註明自己留意的tips mpassfield edittext findviewbyid r.id.password muserfield edittext findviewbyid r.id.username mloginbutton button f...

Android藍芽開發

藍芽開發,也就那麼幾個操作,開啟 搜尋 配對 連線 通訊。其他的東西都是建立在這麼幾個之上。下面就來說說這幾個基本操作。使用前,首先加入藍芽的兩個基本許可權。然後他們基本圍繞這麼幾個類來用。這些類是什麼,慢慢來說。bluetoothadapter bluetoothadapter bluetooth...

安卓開發那點事

不知不覺,開發android已經有一年,不算那些零零散散的時光,也寫了足足四個多月 了。要問我有什麼感想,也就那樣吧,沒啥想法,做應用開發,難免都有難度的。一路跌跌撞撞走來,暈頭轉向的不知所思所想,走過許多的彎路。其實最實際的還是要有紮實的基礎作鋪墊,關鍵點就 是要刻苦鑽研,知識儲備要豐富。所謂那些...