標籤:android style blog http ar 使用 sp strong 檔案
寫在前面:
手遊的雙人對戰實現方式有很多,比如:
- 連網對戰(需要一個伺服器負責轉寄用戶端請求,各種大型手遊的做法)
- 分屏對戰(手機上下分屏,典型的例子就是切水果的雙人對戰)
- 藍芽聯機對戰(通過藍芽聯機,典型的例子是三國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即可)
Android藍芽聯機Demo解析