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

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

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

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

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

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

唤不起系统安装器

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

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

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

这个时候

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

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

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

其实解决方法非常简单。

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

而且还不需要你在代码动态申请,是不是 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 就可以显示了。

android自动化测试--appium运行的坑问题及解决方法

问题 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was ...

关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法

关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法. 其实方法也是很简单 的主要 setOnItemLo ...

IIS6.0服务器搭建网站无法访问解决方法

IIS6.0服务器搭建网站无法访问解决方法     IIS6.0服务器搭建网站无法访问解决方法很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的, ...

CentOS下php使用127.0.0.1不能连接mysql的解决方法

这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下 php代码很简单: 复制代码代码如下: $ser ...

Android开发华为手机无法看log日志解决方法

Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...

Android开发环境搭建时遇到问题的解决方法

版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_loajie/article/details/33823637 Android开发环境搭建 ...

error at ::0 can't find referenced pointcut...解决方法

error at ::0 can't find referenced pointcut...解决方法 学习了:http://dyldragon.iteye.com/blog/512612 升级aspe ...

mysql(8.0连接navicat发生的错误解决方法)

关于mysql(8.0连接navicat发生的错误解决方法)数据库安装图形化界面无法更改加密的方式导致无法连接问题为解决; Alter user 'root'@'localhost' identifi ...

随机推荐

拉格朗日对偶(Lagrange duality)

拉格朗日对偶(Lagrange duality) 存在等式约束的极值问题求法,比如下面的最优化问题:              目标函数是f(w),下面是等式约束.通常解法是引入拉格朗日算子,这里使用 ...

PHP检查表单提交是否来自于本站(验证HTTP_REFERER等)

方法一: 你可以把处理提交数据的代码写到一个单独的文件里,比如form.php.      <?php       if   (defined(’INSIDE’))   {//判断是否有定义INS ...

Alpha第六天

Alpha第六天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

Kubernetes基本功能

说明 目前kubernetes的资料介绍很多也很深刻,本文只是做一个针对自己学习k8s过程的介绍,仅仅是学习笔记的记录. 一.基本使用 1. 命令行 集群信息 Namespace 信息 Control ...

Exp5 MSF基础应用 20164314

一.实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动攻击实践,如ms08_067; (成功) 2.一个针对浏览器的攻击,如ms1 ...

pyQt5不让进度条卡住

这里我们用一个更新程序做示例, 下载文件的过程中让进度条实时显示下载进度. 如果下载和更新进度条的工作都放在一个线程中,会出现进度条卡顿的情况. Qt中正确的做法是把界面刷新和工作任务交给不同的线程去 ...

realm vs&period; domain

从wiki的角度:https://wikidiff.com/domain/realm domain是物理的,realm是抽象的,都是领域. domain是一个人或组织拥有或控制的地理区域,而realm ...

JVM内存分布

参考引用文章地址: http://hllvm.group.iteye.com/group/wiki/3053-JVMhttp://blog.csdn.net/william001zs/article/ ...

JS生成GUID方法

function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof t ...

android 8.0 l2tp问题,Android 8.0 的部分坑及对应解决方法相关推荐

  1. Android 8.0 的部分坑及对应解决方法

    Android 8.0 的部分坑及对应解决方法 参考文章: (1)Android 8.0 的部分坑及对应解决方法 (2)https://www.cnblogs.com/nesger/p/9483582 ...

  2. Android编程中调用Camera时预览画面有旋转问题的解决方法

    本文实例讲述了Android编程中调用Camera时预览画面有旋转问题的解决方法.分享给大家供大家参考,具体如下: 在调用Camera写应用的时候,前后摄像头的情况有时候是不一样的.有时候,明明后摄像 ...

  3. android 摄像头花屏_关于Android 4.4相机预览、录像花屏的问题的解决方法

    关于Android 4.4相机预览.录像花屏的问题的解决方法 系统: lc android4.4 在做前后摄像头录像的时候,发现会出现花屏的时候,但不是必现,可能会在某一次重启之后会出现,而且出现之后 ...

  4. OSError: libcudart.so.8.0: cannot open shared object file: No such file or directory 解决方法

    OSError: libcudart.so.8.0: cannot open shared object file: No such file or directory 解决方法 检查cuda8是否安 ...

  5. Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法

    Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法 参考文章: (1)Win2008上.NET4.0部署出错HTTP 错误 5 ...

  6. 错误:Parameter ‘0‘ not found.Available parameters are [arg1, arg0, param1, param2]的解决方法

    错误:Parameter '0' not found.Available parameters are [arg1, arg0, param1, param2]的解决方法 参考文章: (1)错误:Pa ...

  7. 更换mysql-connector-java-6.0.5jar包后程序出现的两个异常及解决方法

    更换mysql-connector-java-6.0.5jar包后程序出现的两个异常及解决方法 参考文章: (1)更换mysql-connector-java-6.0.5jar包后程序出现的两个异常及 ...

  8. 夜神模拟器127.0.0.1:62001: 由于目标 计算机积极拒绝,无法连接 解决方法

    夜神模拟器127.0.0.1:62001: 由于目标 计算机积极拒绝,无法连接 解决方法 参考文章: (1)夜神模拟器127.0.0.1:62001: 由于目标 计算机积极拒绝,无法连接 解决方法 ( ...

  9. 安装vim提示Depends: libpython3.5 (>= 3.5.0~b1) but it is not going to be installed的解决方法

    安装vim提示Depends: libpython3.5 (>= 3.5.0~b1) but it is not going to be installed的解决方法 参考文章: (1)安装vi ...

最新文章

  1. mysql8.0连接jdbc url_mysql8.0 jdbc连接注意事项
  2. 8月21日至8月27日技术积累
  3. linux磁盘高,CentOS 7.2中磁盘iowait过高解决
  4. 【写作】Texlive和Texmaker学习
  5. Mapreduce的工作流程
  6. Atitit.php  nginx页面空白 并返回500的解决
  7. IE 中开发,兼容与性能测试工具汇总
  8. 使用MySQL自带工具mysqlhotcopy快速备份MyISAM引擎的MySQL数据库
  9. JavaScript 引擎 V8 新机制:JIT-less
  10. Bypass功能及原理介绍
  11. 电脑系统没有自带的字体-楷体GB2312字体 免费版提供下载
  12. geek软件是干什么的_geektool--一款很geek的工具
  13. HDAO 全新项目落地,带动区块链新一轮牛市
  14. jmeter实现手机号归属地接口测试案例
  15. Oracle修改expired状态,Oracle数据库用户账号处于expired状态解决方法
  16. 探讨Python在开发中的重要性!
  17. 登录计算机系统用英语怎么说,登录英语怎么说
  18. 一毕业就上了艘“火箭”,这群校招生在大公司创业
  19. java pdf 首行缩进_java使用iText生成pdf文档的对齐方式
  20. oracle 转义 039,案例:Oracle报错ORA-19583 ORA-27206 ORA-06512

热门文章

  1. 教师计算机校本培训心得,小学教师信息技术应用能力提升工程网络与校本研修心得体会...
  2. Python 通过邮件自更新
  3. My first silly-dummy-crappy web-crawler perl program
  4. 啥是BGP机房啊,被科普一下!
  5. 平凡世界中每一个平凡人
  6. Distilled Person Re-identification: Towards a More Scalable System
  7. 水面无人艇局部危险避障算法研究 第1章 绪论
  8. IIS中应用程序池和站点通过命令启停方法
  9. 【Windows】Window中的常用快捷键
  10. 空间统计:Moran's I(莫兰指数)