Android藍芽聯機Demo解析
手遊的雙人對戰實現方式有很多,比如: 連網對戰(需要一個伺服器負責轉寄用戶端請求,各種大型手遊的做法)分屏對戰(手機上下分屏,典型的例子就是切水果的雙人對戰)藍芽聯機對戰(通過藍芽聯機,典型的例子是三國Kill聯機版)首先,連網對戰不考慮(成本高,伺服器貴..),而分屏對戰局限性太大(兩個人用一個手機玩,太不方便了) 所以藍芽聯機對戰是不錯的選擇,低成本,可實現(三國Kill就是最好的例子,至少證明了這是可行的) 一.資源搜集 搜尋“安卓開發藍芽聯機”,找到很多有用的資訊,經過篩選發現大多資訊都是與BluetoothChat有關的,瞭解後發現BluetoothChat是一個官方Demo,這就好辦了 先把源碼down過來,又順便找到了前輩的源碼解析,省了好多事兒,簡單整理了一下,資源如下:(前兩個來自網路,後兩個是新鮮出爐的) 官方Demo源碼前輩的源碼解析 pdf預覽apk檔案(適用於2.3.5到4.2.2)含詳細注釋的源碼二.Demo測試 拿到Demo先確定可以用: 匯入Eclipse,出現紅叉叉,修改AndroidManifest.xml中的SDK版本,紅叉叉沒了串連手機,安裝運行,程式異常終止,檢查Log,錯誤資訊為you can not combine custom titles with other title最後更改資源檔解決了這個問題,問題詳細及解決方案如下:測試成功,真機聯機聊天沒問題使用Demo中可能遇到的問題: you can not combine custom titles with other title錯誤原因以及怎麼解決?原因:xml裡面定義的activity的theme和代碼定義的theme不一致,即title樣式衝突解決方案:把xml裡對應的activity裡的theme改成@android:style/Theme注意:如果xml裡activity沒有theme標籤,應該添加theme標籤並設定為上面的值真機運行效果如下: 三.藍芽聯機過程 聲明藍芽相關許可權(關於許可權的詳細見前輩的源碼解析,不在此贅述)擷取本機藍芽適配器(BluetoothAdapter是系統提供的藍芽介面,通過適配器操作本機藍芽)掃描可串連的外部藍牙裝置(通過接收藍芽模組返回的廣播訊息得到外部裝置的相關資訊)擷取外部裝置的MAC地址通過MAC地址建立Socket串連(有了Socket串連就好辦了,下面的工作和一般的Socket聊天程式沒什麼區別了)通過Socket串連收發訊息簡單的說,聯機過程就是上面幾個步驟,筆者對源碼進行理解分析後(參照了前輩的源碼解析),補充了更易讀的注釋,如: 四.總結 源碼分析是一件耗時耗力的事情,但如果有時間的話,這樣的付出絕對是值得的,比單純的copy-modify要好很多,在分析別人的代碼過程中,我們可以得到這些東西: 實現原理(比如用來實現功能的各個組件的分工、互動,而不只是簡單的瞭解代碼塊的功能)編碼規範(比如一開始會很好奇為什麼要分方法,分類,分層...)編碼風格(變數、方法、類、包的命名規則,縮排風格...)小技巧/常識(比如為了避免發布前刪除調試資訊的工作,可以定義一個標識變數表示處於調試階段,把所有輸出調試資訊的程式碼封裝裹在if塊中,發布前只需要把標識變數改為false即可)