Android藍牙聯機Demo解析


寫在前面:

手游的雙人對戰實現方式有很多,比如:

  • 聯網對戰(需要一個服務器負責轉發客戶端請求,各種大型手游的做法)
  • 分屏對戰(手機上下分屏,典型的例子就是切水果的雙人對戰)
  • 藍牙聯機對戰(通過藍牙聯機,典型的例子是三國Kill聯機版)

首先,聯網對戰不考慮(成本高,服務器貴..),而分屏對戰局限性太大(兩個人用一個手機玩,太不方便了)

所以藍牙聯機對戰是不錯的選擇,低成本,可實現(三國Kill就是最好的例子,至少證明了這是可行的)

一.資源搜集

搜索“安卓開發藍牙聯機”,找到很多有用的信息,經過篩選發現大多信息都是與BluetoothChat有關的,了解后發現BluetoothChat是一個官方Demo,這就好辦了

先把源碼down過來,又順便找到了前輩的源碼解析,省了好多事兒,簡單整理了一下,資源如下:(前兩個來自網絡,后兩個是新鮮出爐的)

二.Demo測試

拿到Demo先確定可以用:

  1. 導入Eclipse,出現紅叉叉,修改AndroidManifest.xml中的SDK版本,紅叉叉沒了
  2. 連接手機,安裝運行,程序異常終止,檢查Log,錯誤信息為you can not combine custom titles with other title
  3. 最后更改資源文件解決了這個問題,問題詳細及解決方案如下:
  4. 測試成功,真機聯機聊天沒問題

使用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標簽並設置為上面的值

真機運行效果如下:

三.藍牙聯機過程

  1. 聲明藍牙相關權限(關於權限的詳細見前輩的源碼解析,不在此贅述)
  2. 獲取本機藍牙適配器(BluetoothAdapter是系統提供的藍牙接口,通過適配器操作本機藍牙)
  3. 掃描可連接的外部藍牙設備(通過接收藍牙模塊返回的廣播消息得到外部設備的相關信息)
  4. 獲取外部設備的MAC地址
  5. 通過MAC地址建立Socket連接(有了Socket連接就好辦了,下面的工作和一般的Socket聊天程序沒什么區別了)
  6. 通過Socket連接收發消息

簡單的說,聯機過程就是上面幾個步驟,筆者對源碼進行理解分析后(參照了前輩的源碼解析),補充了更易讀的注釋,如:

四.總結

源碼分析是一件耗時耗力的事情,但如果有時間的話,這樣的付出絕對是值得的,比單純的copy-modify要好很多,在分析別人的代碼過程中,我們可以得到這些東西:

  • 實現原理(比如用來實現功能的各個組件的分工、交互,而不只是簡單的了解代碼塊的功能)
  • 編碼規范(比如一開始會很好奇為什么要分方法,分類,分層...)
  • 編碼風格(變量、方法、類、包的命名規則,縮進風格...)
  • 小技巧/常識(比如為了避免發布前刪除調試信息的工作,可以定義一個標識變量表示處於調試階段,把所有輸出調試信息的代碼包裹在if塊中,發布前只需要把標識變量改為false即可)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM