Android应用开发之Android 8.0中一些坑以及对应的解决方法
白羽 2019-01-03 来源 :网络 阅读 1216 评论 0

摘要:本文将带你了解Android应用开发Android 8.0中一些坑以及对应的解决方法,希望本文对大家学Android有所帮助。

    本文将带你了解Android应用开发Android 8.0中一些坑以及对应的解决方法,希望本文对大家学Android有所帮助。


           

前言

虽然   Android 9.0   都已经面世了,本篇文章写的有点迟了。

但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的   Android 8.0   的坑及对应解决方法。

每次系统升级,虽然系统功能更加强大了,各方面性能也提高了。

但是对于开发者而言,一个困扰的问题也是随之而来——兼容。

尤其对于一些已经上市的   App 而言,在新系统发布之前就要了解到底有哪些改动,以避免用户升级新系统后导致 App   没法正常运行。

好了,回归主题,说说 Android 8.0 里面的几个坑吧。

唤不起系统安装器

如果你的   App 提供了更新功能,用户点击更新,你下载完 Apk   之后会自动弹出安装界面。

这个安装界面的弹出就是依赖于系统的安装器。

假设你在   Android 8.0 以下的手机操作正常,但是在 8.0   的手机上,你会发现,下载完之后完全没反应。

这个时候

假设你以为说弹个提示让用户自己安装,我想说


用户才不会理你。用户分分钟就不更新了。

所以说我们要解决这个问题。让这个安装器在   Android 8.0   的手机也能正常唤起。

其实解决方法非常简单。

只需要在   AndroidManifest.xml 中声明以下权限即可。


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

   

而且还不需要你在代码动态申请,是不是   So easy。

一行代码解决这个兼容性问题。

通知问题

假设你的   App 需要在任务栏显示通知。如果你是按照 Android 8.0 之前的写法的话。那么在 8.0   的手机上面你是显示不了的。

那怎么办呢?

关于通知的基本写法这边就不再赘余,如果不清楚的小伙伴自行查阅资料。这边重点说下解决方法。

首先说下下面代码出现的几个变量:


   

private static NotificationManager manager;

public static final String NOTIFICATION_CHANNEL = "your app pkg   name";

private static final String NOTIFICATION_CHANNEL_NAME = "App Channel";

   

第一个写过通知的都知道,一个管理类。

第二个是通知的一个   CHANNEL,这个也是 8.0 之后才引入的。取值 App   包名即可。

第三个自定义,只要保证唯一即可。

兼容有两步需要操作。

1.   创建Channel


   

private static void createChannel() {

 if   (Build.VERSION.SDK_INT >=   Build.VERSION_CODES.O) {

  NotificationChannel notifyChannel = new NotificationChannel(NOTIFICATION_CHANNEL,

   NOTIFICATION_CHANNEL_NAME,

   NotificationManager.IMPORTANCE_DEFAULT);

  notifyChannel.setLightColor(Color.GREEN);

  notifyChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

  manager.createNotificationChannel(notifyChannel);

 }

 }

   

2.   获取 Notification.Builder


   

private Notification.Builder getNotificationBuilder(Context   sourceContext) {

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)   {

  return   new Notification.Builder(sourceContext,   NOTIFICATION_CHANNEL);

 } else {

  return new Notification.Builder(sourceContext);

 }

 }

   

可以看到,上面的操作都以   8.0 作为分界处理。

做完这两步,之前不能显示通知的 App 就可以显示了。

Only fullscreen opaque   activities can request orientation

昨天屁颠屁颠把项目适配到8.0,本来觉得美滋滋,结果app一启动直接crash,搞得我一脸懵逼。。。不能忍啊,赶紧去看一下日志,于是就看到了如下图

有一句是这样的Only   fullscreen opaque activities can request   orientation,也就是说只有全屏不透明的activity才可以设置方向,既然知道问题所在就好办了。

原因

出现这样的问题,绝大多数都是因为我们为了提高用户体验,手动取消App启动白屏或者黑屏的时候,将Splash界面设为了透明,然后这个时候又设置了方向为垂直,从而导致了这个问题。

解决

重点来了,解决办法其实很简单

1.找到你设置透明的Activity,然后在他的theme中将android:windowIsTranslucent改为false
eg:<item   name="android:windowIsTranslucent">false</item>

2.再加入<item   name="android:windowDisablePreview">true</item>就搞定了。



   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程