美文网首页
android8.0适配特性

android8.0适配特性

作者: Coderqzw | 来源:发表于2018-10-26 11:46 被阅读0次

    最近国内有些手机可以更新android P了,开始研究p的适配了。研究p之前,先来总结一下android O需要适配的一些地方,这些都是项目中实际用到的,当然可能还有些适配,没有管它(捡重要的应付一下啦~~~)。

    主要有一下几点:

    一、桌面图标适配。刚开始接触到O时,安装新的项目APP桌面的图标是圆形的小机器人(对,就是你知道的那个)。无论怎么调mipmap文件夹下的图片都没用(蛋疼了好久)。最后在度娘(有些事还可以用度娘的, 外事问谷歌 内事问百度 房事问天涯 性事问猫扑,当然有些事还是慎用度娘)的帮助下,明白了这是O的新特性要适配的。适配方法:mipmap-anydpi-v26目录下的ic_launcher,你蛋疼的发现这不是一张图片,而是一个xml(插妹儿)文件。

    结构是:

    ic_launcher.xml

    看名字就是一个背景文件和一个前景(这么翻译吧)文件,需要修改里面的图标,默认是小机器人。

    还有个快捷方法windows:Ctrl+Shift+A    mac:command+shft+A ,输入Image Asset,然后回车(这个会吧,Enter,Enter,Enter,重要的事情说三遍),会出现一个界面:

    Image Asset

    根据你程序猿的眼光调一下就行了,不要和设计狮咬起来了啊。。。。。

    为了让你更明白,送上一张图

    icon

    二、安装未知应用的权限。android APP都会有打开APP时内部提醒更新的功能。但是在O上你会发现,下载了apk包,安装不了。如果你开始没了解过8.0新特性的话,可能又要蛋疼一天、两天的。蛋都碎了。。。。。。这个其实是与android系统越来越注重安全性,越来越看重用户权限的理念有关。所以你的APP第一次在内部自动升级时,一定要引导用户手动打开:安装未知来源应用的权限(mmp,我自己的APP内升级我自己的APP,怎么就是tm未知应用了,自己想吧、、、、)

    首先在AndroidManifest.xml文件中声明:

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

    然后安装时判断是否获得权限:

    getPackageManager().canRequestPackageInstalls();

    如果没有,就引导用户打开权限(也可以弹个dialog,提示一下,表示友好嘛)

    Intent intent =new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivity(intent);

    用户打开权限就可以升级APP了。。。。。。

    三、悬浮窗设置。有些APP可能就会用到悬浮窗,比如,有聊天室功能的,需要方便用户联系客服的等等吧(这两种是我做过的、、、)这个适配过6.0或者7.0的都知道,要声明权限,还要引导用户打开悬浮窗权限(又是引导,好有罪恶感啊)。但是8.0的权限申请就不一样了,之前的是

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

    现在变成

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

    而且以前的引导用户打开权限

    Intent intent =new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName()));

    startActivityForResult(intent, 101);

    用户打开权限后在onActivityResult()方法中判断Settings.canDrawOverlays(this),返回的是true。但是8.0之后就不一样了,即使用户打开权限,Settings.canDrawOverlays(this)返回的依然是false,之后再关闭APP,重新打开时,返回的才是true。(emmmmm,有蛋疼了好久,蛋都要碎了、、、、)

    在查了好多资料后,发现这可能是新版本的bug(这个是google粑粑,也会有这么明显的bug,,,,不会的,不会的)。终于的stackoverflow上看到一篇说的不错。我用的就是第一位大神的解决方法。

    判断是否开启权限

    这位大神发现,当mode == 0时,权限开启Settings.canDrawOverlays(this),返回true;当用户打开权限时,Settings.canDrawOverlays(this),返回false,但是mode==1;当用未打开权限时,Settings.canDrawOverlays(this),返回false,但是mode==2。所以根据mode来判断,是可以解决这个问题的,但是不是适配所有的android手机,就不得而知了(你懂得,每个手机厂商都会定制自己的android系统,就差说自主知识产权了、、、)

    附上stackoverflow文章链接(你懂得,有的时候会打不开哦。。。。),英语好的大神(哑巴英语也行,没人让你读出来)可以看原文,有多种解决办法可以学习:

    Why in Android O method Settings.canDrawOverlays() returns “false” when user has granted permission to draw overlays and returns to my application?

    好了,暂时先说这么多8.0的适配,如果需要后面再补充,欢迎指正,扔砖,还有你的40米大刀。。。。

    如果给个赞,会更好点(有点不要脸了啊,哈哈哈哈哈、、、、)

    不要管什么bug,不要管什么格子衫,不要管什么秃顶,因为你是程序猿,管也没用、、、努力吧,骚年!

    相关文章

      网友评论

          本文标题:android8.0适配特性

          本文链接:https://www.haomeiwen.com/subject/khlktqtx.html