资讯专栏INFORMATION COLUMN

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

Donald / 772人阅读

摘要:但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的的坑及对应解决方法。让这个安装器在的手机也能正常唤起。其实解决方法非常简单。做完这两步,之前不能显示通知的就可以显示了。

虽然 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 就可以显示了。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2837.html

相关文章

  • Android开发过程中坑及解决方法收录(四)

    摘要:某个控件要放在布局的底部底部导航条嵌套的其他布局嵌套的其他布局简单说明一下,上面的代码中有一个,里面嵌套了两个这里的关键是嵌套里面的第一个布局,注意这个布局里面的这两行属性代码第二个就是可以放在底部的一个当然你可以写你自己的布局显示图片卡1.某个控件要放在Linearlayout布局的底部(底部导航条) ...//嵌套的其他布局…… ...//嵌套的其他...

    番茄西红柿 评论0 收藏0
  • web app遇到一些坑及小技能(持续更新...)

    摘要:遇到的一些坑问题手机端事件会有大约的延迟原因手机端事件,因为在事件触发之后,浏览器要判断用户是否会做出双击屏幕的操作,所以会等待来判断,再做出是否触发事件的处理,所以就会有的延迟解决方法使用事件来代替事件,如的事件和,还有我自己 遇到的一些坑 问题:手机端 click 事件会有大约 300ms 的延迟 原因:手机端事件 touchstart --> touchmove --...

    darry 评论0 收藏0
  • web app遇到一些坑及小技能(持续更新...)

    摘要:遇到的一些坑问题手机端事件会有大约的延迟原因手机端事件,因为在事件触发之后,浏览器要判断用户是否会做出双击屏幕的操作,所以会等待来判断,再做出是否触发事件的处理,所以就会有的延迟解决方法使用事件来代替事件,如的事件和,还有我自己 遇到的一些坑 问题:手机端 click 事件会有大约 300ms 的延迟 原因:手机端事件 touchstart --> touchmove --...

    zhiwei 评论0 收藏0
  • web app遇到一些坑及小技能(持续更新...)

    摘要:遇到的一些坑问题手机端事件会有大约的延迟原因手机端事件,因为在事件触发之后,浏览器要判断用户是否会做出双击屏幕的操作,所以会等待来判断,再做出是否触发事件的处理,所以就会有的延迟解决方法使用事件来代替事件,如的事件和,还有我自己 遇到的一些坑 问题:手机端 click 事件会有大约 300ms 的延迟 原因:手机端事件 touchstart --> touchmove --...

    hellowoody 评论0 收藏0
  • Flutter 即学即用系列博客——01 环境搭建

    摘要:笔者这边使用的是电脑,因此以电脑的环境搭建为例。官网安装链接中文网安装链接我们这边以官网为例进行说明。下载完成之后解压到自己想放置的目录建议路径不要包含中文。按照上面提示进行处理即可。 前言 工欲善其事,必先利其器 所以第一篇我们来说说 Flutter 环境的搭建。 笔者这边使用的是 MAC 电脑,因此以 MAC 电脑的环境搭建为例。 Windows 或者 Linux 也是类似的操作。 ...

    JohnLui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<