Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 932|回复: 0

[默认分类] Android 8.0 的部分坑及对应解决方法

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-15 14:09:59 | 显示全部楼层 |阅读模式

    虽然 Android 9.0 都已经面世了,本篇文章写的有点迟了。
    但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的 Android 8.0 的坑及对应解决方法。

    每次系统升级,虽然系统功能更加强大了,各方面性能也提高了。
    但是对于开发者而言,一个困扰的问题也是随之而来——兼容。
    尤其对于一些已经上市的 App 而言,在新系统发布之前就要了解到底有哪些改动,以避免用户升级新系统后导致 App 没法正常运行。
    好了,回归主题,说说 Android 8.0 里面的几个坑吧。
    唤不起系统安装器
    如果你的 App 提供了更新功能,用户点击更新,你下载完 Apk 之后会自动弹出安装界面。
    这个安装界面的弹出就是依赖于系统的安装器。
    假设你在 Android 8.0 以下的手机操作正常,但是在 8.0 的手机上,你会发现,下载完之后完全没反应。
    这个时候

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

    用户才不会理你。用户分分钟就不更新了。
    所以说我们要解决这个问题。让这个安装器在 Android 8.0 的手机也能正常唤起。
    其实解决方法非常简单。
    只需要在 AndroidManifest.xml 中声明以下权限即可。
    1. [code]<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    复制代码
    [/code]
    而且还不需要你在代码动态申请,是不是 So easy
    一行代码解决这个兼容性问题。
    通知问题
    假设你的 App 需要在任务栏显示通知。如果你是按照 Android 8.0 之前的写法的话。那么在 8.0 的手机上面你是显示不了的。

    那怎么办呢?
    关于通知的基本写法这边就不再赘余,如果不清楚的小伙伴自行查阅资料。这边重点说下解决方法。
    首先说下下面代码出现的几个变量:
    1. [code]private static NotificationManager manager;
    2. public static final String NOTIFICATION_CHANNEL = "your app pkg name";
    3. private static final String NOTIFICATION_CHANNEL_NAME = "App Channel";
    复制代码
    [/code]
    第一个写过通知的都知道,一个管理类。
    第二个是通知的一个 CHANNEL,这个也是 8.0 之后才引入的。取值 App 包名即可。
    第三个自定义,只要保证唯一即可。
    兼容有两步需要操作。
    1. 创建Channel
    1. [code]private static void createChannel() {
    2.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    3.             NotificationChannel notifyChannel = new NotificationChannel(NOTIFICATION_CHANNEL,
    4.                     NOTIFICATION_CHANNEL_NAME,
    5.                     NotificationManager.IMPORTANCE_DEFAULT);
    6.             notifyChannel.setLightColor(Color.GREEN);
    7.             notifyChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
    8.             manager.createNotificationChannel(notifyChannel);
    9.         }
    10.     }
    复制代码
    [/code]
    2. 获取 Notification.Builder
    1. [code]private Notification.Builder getNotificationBuilder(Context sourceContext) {
    2.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    3.             return new Notification.Builder(sourceContext, NOTIFICATION_CHANNEL);
    4.         } else {
    5.             return new Notification.Builder(sourceContext);
    6.         }
    7.     }
    复制代码
    [/code]
    可以看到,上面的操作都以 8.0 作为分界处理。
    做完这两步,之前不能显示通知的 App 就可以显示了。

    更多内容可以看官方示例:
    https://github.com/googlesamples/android-NotificationChannels/
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-2 23:35 , Processed in 0.362842 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表