關於android藍芽開發的一些總結
阿新 • • 發佈:2019-02-13
最近三個月一直在忙著公司的一個產品。這個產品主要是藍芽和微控制器之間的資料交換。當時在選擇通訊方式的時候有2種選擇。一種是wifi,另外一種就是後來選擇的藍芽。期間遇到了很多問題,包括藍芽連線問題啊,android版本問題,bluesocket連線問題等等。
1、android藍芽連線配對問題:首先搜尋了藍芽,介面卡搜尋藍芽裝置後將結果以廣播形式傳出去,所以自定義一個繼承廣播的類,在onReceive方法中獲得並處理藍芽裝置的搜尋結果。最初的版本沒有使用自動配對,是每次使用者搜尋完藍芽找到藍芽點選進行藍芽的連線。但是就是那樣,使用的是官方的api,在點選listview裡的藍芽時候,還會報上空指標錯誤,一直在找錯誤,但是至今沒有找到。後來使用了自動配對的方法去實現藍芽的連線和配對。但是對於第一次配對,成功的概率不高。對於這種情況我就開始對輸入的pin進行監聽使用的方法是matchBlutetooth.setPin(btDevice.getClass(), btDevice,"8888"); 。我監聽的結果發現pin值是任意變化的而不是我設定的8888.但是因為專案比較緊,所以對於這個版本的app只能先將就的。
2、藍芽狀態檢測反應慢的問題。對於藍芽斷開的監測是使用廣播去完成的。但是在開發過程中發現藍芽斷開後廣播需要10秒左右才有響應,在此不能不吐槽下android藍芽。
3、bluesocket null判斷。判斷bluesocket連線狀態,在4.0之前只能用null去判斷socke是否為空,但是4.0之後增加了isconnected的方法。但是想用來判斷藍芽是否連線2種方法都是實現不了的。在開發中發現即使是斷開狀態isconnected也是等於true的。
4、在資料傳輸過程中,對於socket通訊。為了保證資料的完整性和正確性,採用了輪詢監聽的機制,也在指令中增加了一個狀態位。用狀態位去監聽資料接收的完整。
作為在android開發的菜鳥,第一次接觸藍芽通訊的開發。收穫還是比較多的。對於以上出現的問題,只是我個人開發中遇到的問題。也許問題是因為開發中程式碼邏輯的不嚴謹造成的。