贯众云测试目前测试的App数已有8465个,共发现30551次Bug。很多问题是因为手机品牌及系统版本导致的兼容性问题,这些问题严重的会导致应用崩溃,影响用户体验。其实有些兼容性的问题在开发的过程中是完全可以避免的,以下我们就针对两种兼容性问题做下总结,我们的开发也根据具体例子给出了解决策略:
1、不同安卓手机品牌导致的兼容性问题
相信各位开发测试者对这个问题并不陌生,为了进行一个弹出框提示, 同样的代码, 不同品牌的手机上dialog.setMessage(msg)的表现不同。例如,Meizu手机中的字段是居中对齐的,而别的品牌手机一般是左对齐,如三星、Philips、Htc都是左对齐。
图1 Meizu手机(字体居中对齐) 图2 Philips手机(字体左对齐)
解决策略:
如果要解决Meizu弹出框字体居中对齐问题,有三种解决思路:
思路一:
通过android.os.Build.MANUFACTURER判断是否是Meizu手机,如果是Meizu手机则不用dialog.setMessage(String msg)方法,而创建一个显示文字的view,然后用dialog.setView(View layout)方法。
思路二:
不采用dialog.setMessage(String msg)方法,全部采用dialog.setView(View layout)方法。
思路三:
不用Dialog类,弹出框采用自定义Activity。
2、不同系统版本导致的兼容性问题
很多应用在安装启动后会弹出一系列的权限请求弹框,如果处理不恰当可能会导致应用崩溃。Android 6.0(sdk 23) 以下版本只要APP在AndroidManifest.xml中声明了对应权限就默认授予该权限,Android6.0 版本新增了动态权限申请管理机制,在应用需要权限的时候必须检查APP是否授予了该权限,直接使用的话会造成应用Crash。以下列出了可能导致应用崩溃的危险权限列表:
例子:
应用程序继承了拨号功能时,需要在Manifest 文件中去声明拨号的权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
代码实现:
private void callDirectly(String mobile){
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:" + mobile));
mContext.startActivity(intent);
}
解决方案:
- final public static int REQUEST_CODE_ASK_CALL_PHONE = 123;
- public void onCall(String mobile){
- this.mMobile = mobile;
- if (Build.VERSION.SDK_INT >= 23) {
- int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE);
- if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
- ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.CALL_PHONE},REQUEST_CODE_ASK_CALL_PHONE);
- return;
- }else{
- //上面已经写好的拨号方法
- callDirectly(mobile);
- }
- } else {
- //上面已经写好的拨号方法
- callDirectly(mobile);
- }
- }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于