android 蓝牙版本兼容,Android蓝牙4.0 版本兼容性问题

在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也要做相应更改,如:

1

3 android:targetSdkVersion="18" />

二、添加用户权限

Project需要蓝牙的使用权限,故需要添加uses-permission

1

2

htc4.2.2(包括4.1.2),需要在application节点内添加

1

3 android:required="false" />

android4.3及以上,需要添加

1

3 android:required="true" />

三、应用程序的初始化

由于项目需要做兼容性开发,故工程的结构尽量做到离散化,降低耦合性,方便以后的升级和功能扩展。

在进入工程时,MainActivity需要做以下事情:

1、  系统版本的识别

根据官方的API中的说明,可以获取到手机硬件信息,

手机型号Build.MODEL

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

sdk版本Build.VERSION.SDK

This constant is deprecated. Useto

easily get this as an integer.

及frimware版本号(系统版本号) Build.VERSION.RELEASE

The user-visible version string.

所以在java代码中,可以得到手机型号和版本

1 String model = android.os.Build.MODEL;//获取手机型号

2 String version = android.os.Build.VERSION.RELEASE; //获取手机版本

然后用正则表达式来匹配,例如匹配samsung4.2.2的系统如下:

1 Pattern patternsam = Pattern.compile(".*[G][T].*[4][.][2].*"); //匹配sam422

2 Matcher matcherSam = patternsam.matcher(model +version);3 boolean isSam422 = matcherSam.matches();

以此类推,可以得到boolean类型变量isHtc422,isos43。于是将这些值用一个全局静态变量来表示,方便项目在用到蓝牙的地方做判断。

69c5a8ac3fa60e0848d784a6dd461da6.png1 if(isHtc422){2 ConstantsHelp.PhoneVersion=1; //Htc422

3 }else if(isSam422){4 ConstantsHelp.PhoneVersion=2; //Sam422

5 }else if(isos43){6 ConstantsHelp.PhoneVersion=3; //os43

7 }else{8 ConstantsHelp.PhoneVersion=0; //No match

9 }

69c5a8ac3fa60e0848d784a6dd461da6.png

2、根据系统版本进入不同的Activity操作蓝牙

在做完系统匹配后,延迟自动进入蓝牙操作的界面

69c5a8ac3fa60e0848d784a6dd461da6.png1 new Handler().postDelayed(newRunnable() {2 @Override3 public voidrun() {4 switch(ConstantsHelp.PhoneVersion) {5 case 1:6 Intent intent1 = new Intent(MainActivity.this,MainActivity_os422_htc.class);7 startActivity(intent1);8 finish();9 break;10 case 2:11 Intent intent2 = new Intent(MainActivity.this,MainActivity_os422_sam.class);12 startActivity(intent2);13 finish();14 break;15 case 3:16 Intent intent3 = new Intent(MainActivity.this,MainActivity_os43.class);17 startActivity(intent3);18 finish();19 break;20 case 0:21 Toast.makeText(getApplicationContext(), "The app is not supported in your phone", Toast.LENGTH_LONG).show();22 finish();23 break;24 default:25 break;26 }27 }28 }, 50);

69c5a8ac3fa60e0848d784a6dd461da6.pngMainActivity_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

原文:http://www.cnblogs.com/myulong/p/3595338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值