android8.0适配特性

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

主要有一下几点:

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

结构是:

android8.0适配特性_第1张图片
ic_launcher.xml

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

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

android8.0适配特性_第2张图片
Image Asset

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

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

icon

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

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

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

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的权限申请就不一样了,之前的是

现在变成

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

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适配特性)