Android藍芽4.0 版本相容性問題

來源:互聯網
上載者:User

在android 4.3以下的SDK中,由於各個廠商都是單獨做的SDK,基本上開發出來的APP都互相不相容,如何在android4.3以下及以上版本中做到相容,將是以下要講到的內容。

以samsung 4.2.2,htc4.2.2(htc的4.2.2和4.1.2是用一個jar的)和android4.3為例。

一、需要引用的包

samsung 4.2.2需要引用samsung_ble_sdk_200.jar,將samsung_ble_sdk_200.jar放在lib檔案夾下,通過Add External JARS方式引入包;而htc4.2.2需要引用com.htc.android.bluetooth.le.jar, com.htc.android.bluetooth.le.jar是不能放在lib檔案夾下,否則project將會出錯,同樣以Add External JARS方式引入包。Android4.3及以上的,則只要將project的SDK API版本更換至最高即可,同時要注意AndroidManifest中uses-sdk也要做相應更改,如:

 <uses-         android:minSdkVersion="16"     android:targetSdkVersion="18" />

 

二、添加使用者權限

         Project需要藍芽的使用許可權,故需要添加uses-permission

 <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

htc4.2.2(包括4.1.2),需要在application節點內添加

 <uses-             android:name="com.htc.android.bluetooth.le"         android:required="false" />

android4.3及以上,需要添加

 <uses-             android:name="android.hardware.bluetooth_le"         android:required="true" />

 

三、應用程式的初始化

         由於項目需要做相容性開發,故工程的結構盡量做到離散化,降低耦合性,方便以後的升級和功能擴充。

         在進入工程時,MainActivity需要做以下事情:

1、  系統版本的識別

根據官方的API中的說明,可以擷取到手機硬體資訊,

手機型號 Build.MODEL

String

MODEL

The end-user-visible name for the end product.

sdk版本 Build.VERSION.SDK

String

SDK

This constant is deprecated. Use SDK_INT to easily get this as an integer.

frimware版本號碼(系統版本號碼) Build.VERSION.RELEASE

String

RELEASE

The user-visible version string.

所以在java代碼中,可以得到手機型號和版本

         String model = android.os.Build.MODEL;         String version = android.os.Build.VERSION.RELEASE; 

然後用Regex來匹配,例如匹配samsung4.2.2的系統如下:

         Pattern patternsam = Pattern.compile(".*[G][T].*[4][.][2].*");          Matcher matcherSam = patternsam.matcher(model +          isSam422 = matcherSam.matches();  

以此類推,可以得到boolean類型變數isHtc422,isos43。於是將這些值用一個全域靜態變數來表示,方便項目在用到藍芽的地方做判斷。

                      ConstantsHelp.PhoneVersion=1;          }              ConstantsHelp.PhoneVersion=2;          }              ConstantsHelp.PhoneVersion=3;          }             ConstantsHelp.PhoneVersion=0;          }

 

2、根據系統版本進入不同的Activity操作藍芽

在做完系統匹配後,延遲自動進入藍芽操作的介面

  Handler().postDelayed(                                                  1                     Intent intent1 =  Intent(MainActivity.,MainActivity_os422_htc.                                         2                     Intent intent2 =  Intent(MainActivity.,MainActivity_os422_sam.                                         3                     Intent intent3 =  Intent(MainActivity.,MainActivity_os43.                                         0                     Toast.makeText(getApplicationContext(), "The app is not supported in your phone"                                                                       }, 50);
MainActivity_os422_htc,MainActivity_os422_sam,MainActivity_os43同樣要在AndroidManifest中註冊,還有相應的Service。
四、主程式的初始化
1、介面初始化
MainActivity_os422_htc,MainActivity_os422_sam,MainActivity_os43雖然是不同的Activity,但它們的介面是一樣的,即setContentView(R.layout.activity_main)裡面的View是一樣的。
2、藍芽的初始化
由於是在不同的Activity中,htc422不會進入sam422的Activity,所以相互之間不會有影響,藍芽的初始化和操作可以跟寫單獨的版本的Project是一樣的。

由於本人水平有限,歡迎大家給予指導,如要轉載,請註明出處
http://www.cnblogs.com/myulong/p/3595338.html


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.