Android 机型适配问题整理

from:http://blog.csdn.net/fredro/article/details/78202148

小米手机适配

可以说小米手机对android系统定制得让人头痛,好好的应用跑在小米手机上多多少少会点问题。
  • 短信发送失败无回调
    在发送短信时候,若系统拦截之后,若用户点击拒绝发送短信,这个时候发现一直收不到系统发送短信失败的广播回调,就会出现无回调不知道短信是否发送成功,这对于需要监听短信发送结果的要求是一个打击,用户往往很可能拒绝发送短信。`
    解决方案:使用安卓系统的权限管理进行权限,既能接受说明发送短信意图也能收到回调。这个时候系统在有权限申请之后,不会再默认拦截了。
  • 应用安装完成后打开应用出现初始化两次
    是指在调用系统安装应用程序完成安装之后,若用户直接通过这个程序打开应用进入之后,用户按home键退出回到桌面应用程序列表,又点击该应用的icon重新进入该应用,却发现应用是重新打开,而不是继续上次离开的界面,按道理应用不应该重新初始化,后面经搜索发现这是个系统bug。
    解决方案:在启动Activity onCreate方法中进行判断是否重复启动
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //防止重复创建的问题,第一次安装完成启动,和home键退出点击launcher icon启动会重复
        if (!isTaskRoot()
                && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                && getIntent().getAction() != null
                && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

            finish();
            return;
        }
        }
  • 静态注册广播收不到广播
    在注册系统广播之后,收到广播是有条件,并不是每次都能够收到,在该品牌机型中要求:Receiver注册不能配置运行在非该应用包名下的进程中,否则收不到广播,广播只给不配置android:process的Receiver。同时要求是在当前进程应用没有退出的前提下,否则也收不到。
    暂没有找到解决方案

华为荣耀

  • Toast不显示

    也是偶然发现在荣耀8机型上后台应用的toast不会被显示出来,只能当前在前台的应用TOAST提示。
    解决方案:替换toast显示,改用其他方式,如dialog或者弹出activity界面。

  • 多网络下指定网络不成功
    简单讲就是指wifi和移动网络同时开着的情况下,不能指定移动网络访问,详见接受说明移步到我的另一篇文章:http://blog.csdn.net/u010019468/article/details/72886859

金立

receiver查询不到

在错误日志中发现金立某些手机尽然对manfiest中组件receiver配置按Interfiter过滤查询结果显示没有找到改组件,这导致发现好多配置错误而导致功能失败,其实实际是存在。后来发现只要改变一个参数flag,且是被系统不推荐使用的参数配置,就没有问题了。

解决方案如下查询receiver是否配置,flag配置成其他的就不行。

List<ResolveInfo> lists = manager.queryBroadcastReceivers(intent,
                PackageManager.GET_DISABLED_COMPONENTS);

Oppo手机

  • 移动网络访问权限
    在oppo R9s上发现oppo定制Android权限管理,还增加了对网络访问的权限管理,移动网络和wifi访问还弹出一层用户授权机制,真是一道障碍,这种情况下,当wifi和移动网络同开时,要走移动网络,而此时移动网络还没有来得及经用户授权允许,从导致访问不成功,oppo手机仅仅在移动网络下,第一次问询问用户是否允许,而wifi开着时,则不会。

权限适配问题

在Android 6.0之后新增了权限管理,google这样设计初衷是好的,但是万恶的厂商总喜欢擅自修改定制系统,导致留下一些头疼的适配问题给广大的Android 开发者,下面就讲讲权限适配时出现的问题。

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

这个权限按照系统权限组分组在非危险权限组中,按照Android权限管理的意思,只要在Manifest中配置下就可以了,然而在实际使用中却发现在机型中出现了适配问题。

如华为6.0系统手机

java.lang.SecurityException: cn.com.chinatelecom.account.demo was not granted  either of these permissions: android.permission.CHANGE_NETWORK_STATE.

只要在app中build.gradle中把 targetSdkVersion >=23就会出现这样的问题

targetSdkVersion 23

若要暂时性的解决这个问题就把targetSdkVersion <=22即可。
但是这个反应了一种不合理,不按常理情况下,就一波草泥马在心中狂奔。

未完待续。。。

发布了4 篇原创文章 · 获赞 6 · 访问量 3412

猜你喜欢

转载自blog.csdn.net/zafkiel_/article/details/78338289