按:

将根据需求,写写整个思路。

一,需求

应用第一次启动后,在通知栏里显示FLAG_ONGOING_EVENT类型的通知。点击之后消失,将在以下三种情况下,回到应用:

第一种: 当前显示------------------回到当前页

第二种: 后台------------------------回到当前页

第三种: 退出应用-----------------启动应用

二,解决方案

方案1:launcher方式启动应用

一些启发很显然,launcher的启动方式完美解决以上三种情况,并且可以预估,代码量将会很少。

可行性:不可行。

原因:通知是事件滞前性的,我们先设定了PendingIntent,但是当在应用中浏览时,之前制定的pendingIntent已经不能到达我们的当前页面。

launcher启动的原理:

对比之下,简单的猜测了下launcher启动应用的原理,显然,launcher之所以能很好的处理以上三种情况,是因为,它是事件滞后的。流程如下:

step1 点击应用图标,获取应用包名

step2 获取此包名下的activity task,得到topAcitivty

step3: intent指向此topAcitivity即可。

方案2:动态更新Notification

通过方案1,显然,只要进入新的Activity,动态更新通知即可。

可行性: 不可行

原因:此需求是新增加的,如果按照此方案,代码的改动会非常大。而且会影响性能。而且此功能并没有这么重要。

方案3:修改Launcher mode,让应用自动回到栈顶。

代码上比较简单。activity的launch mode 修改为single top即可。

可行性:不可能,基于以往的需求,主要的几个Activity均为single task,不确定这样的改动是否会引用新的bug,所以不采用此改动。

相关代码如下:

public void showInstallReminderNotification() {if (mNotification == null) {mNotification = new Notification();}if (mPendingIntent == null) {Intent intent = new Intent();intent.setAction(Intent.ACTION_MAIN);intent.setClass(this.mContext, MainActivity.class);intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);mPendingIntent = PendingIntent.getActivity(this.mContext, 0,intent, 0);}mNotification.defaults = Notification.DEFAULT_LIGHTS;mNotification.icon = R.drawable.ic_launcher;mNotification.flags = Notification.FLAG_ONGOING_EVENT;RemoteViews remoteViews = new RemoteViews(this.mContext.getPackageName(), R.layout.remote_view);remoteViews.setTextViewText(R.id.textview, "this is my test");mNotification.contentView = remoteViews;mNotification.contentIntent = mPendingIntent;mNotificationManager.notify(123, mNotification);}

Note

做了验证:

1,不设置launcher mode,也能达到同样的效果。

2,设置launcher mode为single task,不会生效。

相关的具体的差别还没有仔细看,未来会写出。

方案4:Service获取TopActivity

方式:点击通知,启动service,获取topAcitivty

可能性:此方案,其实是将Notification的事件置前性转化为置后

可行性:不可行

原因:Service启动Activity时,会new task,原有的数据可能会丢失。

方案5:指定到达的Activity

参看了其他的应用,qq音乐,其实都是制定了通知栏到达的页面,大概也有以上三种方案的考虑。

分解需求为两部分:

第一部分,如果应用启动,回到当前页面。(MainActivity)

第二部分,如果应用关闭,启动应用。(SplashActivity)

实现:

1,默认PendingIntent指向MainAcitivty

2,退出时,更新PendingIntent到SplashActivity

三,总结:方案5

优点:

1,基本满足了需求

2,保证了代码的简洁和稳定性

缺点:

其他页面将直接引导到主界面(MainActivity,内容的展示页面)

转载于:https://blog.51cto.com/mikewang/1263841

由通知栏进入到应用的尝试相关推荐

  1. 优化安卓应用内存的神奇方法以及背后的原理,一般人我不告诉他

    安卓应用一般都害怕自己被杀.内存占用高是被杀的重要原因之中的一个.所以大家都想尽各种招数应对,但效果都一般. 但有一招: WindowManagerGlobal.getInstance().start ...

  2. android 获取已安装列表权限,Android 如何完整的获取到用户已安装应用列表

    接到产品经理的预研需求,说希望获取用户已安装应用列表.这个问题应该不难,只要是要把相关的知识点整理和验证一下. 对于获取用户已安装应用列表,我个人是很熟悉的,因为我的华为手机上,手机管家天天会在通知栏 ...

  3. android11测试版下载,Find X2系列 Android 11 Beta1 测试版发布,你要尝试一下吗?

    原标题:Find X2系列 Android 11 Beta1 测试版发布,你要尝试一下吗? 今年的特殊情况导致安卓11发布日期的一波三折,然而最后谷歌还是在6月11日发布了安卓Beta1版本.有趣的是 ...

  4. 手机热点总是正在连接服务器,手机热点用不了?可以尝试这个方法。

    原标题:手机热点用不了?可以尝试这个方法. 下班路上,上司突然打来"夺命连环call",早上的方案需要赶紧改一下.无奈,只能拿出笔记本在地铁上临时办公,关键时候连接手机热点,却发现 ...

  5. swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用

    swift通知栏推送 by Neo Ighodaro 由新Ighodaro 如何使用Swift使用推送通知构建食品交付应用 (How to build a food delivery app with ...

  6. android 弹窗 onpause,Android 下拉通知栏时Activity的生命周期——重新理解onPause()

    下拉通知栏时发生了什么 在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的.在网上众多关于Activity生命周期的讨论中,很多人认为onPaus ...

  7. Android通知栏字体大小,Android通知栏介绍与适配总结(上篇)

    此文已由作者黎星授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知 ...

  8. 关于极光推送通知栏无法正确显示应用图标

    今天在集成极光推送的时候遇到了一个很无奈的问题,在推送时应用的通知图标一直显示极光的图标,折腾了许久也没折腾出来. 我先是将demo的包名改成自己的应用包名跑了一次,效果还行,然后就根据文档将推送sd ...

  9. Delphi 监听安卓(Android)手机通知栏信息

    Delphi 监听安卓(Android)手机通知栏信息 因为一些业务需要,我们有时候需要知道手机通知栏显示的信息,然后根据这些信息去处理一些相应的业务逻辑.如:自动监听收到的短信验证码,提取后自动填写 ...

最新文章

  1. 扛住100亿次请求?我们来试一试!
  2. 一文读懂机器学习中的正则化
  3. 数字化?智能化?中国企业智能制造现状究竟如何 李炳积 工信头条 昨天
  4. IT界顶级大咖讲解如何获得月薪5万以上的秘诀干货!
  5. 1.2、什么是函数?什么是方法
  6. f2 自适应_典型的三行二列居中高度自适应布局
  7. oculus ios学习资料整理
  8. DataFrame 学习笔记
  9. 厦门大学和福州大学计算机专业哪个好,福州大学和厦门大学的土木工程哪个好...
  10. Mysql 优化的一些要点
  11. mysql取最大一条数据,mysql取出表中,某字段值最大的一条纪录,sql语句
  12. [snmp++]读取cisco路由交换机信息[一] - 环境搭建
  13. 利用两款软件实现图片转文字
  14. 我对STL的一些看法(三)认识list容器
  15. flash动画制作作品_flash施工动画制作应该展现哪些内容
  16. arraylist 线性不安全_Java面试系列(一)--集合类ArrayList
  17. 【通信仿真】基于matlab蒙特卡罗算法2FSK系统抗噪声性能仿真【含Matlab源码 1632期】
  18. ie浏览器样式兼容写法_浏览器兼容性以及写法
  19. 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)
  20. Linphone android去电增加自定义SIP消息头的流程分析

热门文章

  1. 一张图图片分块html,css img图片是内联还是块?
  2. PTA7、 转换函数使用 (10 分)
  3. 数据库(1)MySQL安装
  4. typeof和instanceof
  5. vs 2017 无法安装任何 nuget package,提示“库没有注册。。。”
  6. Vue路由 --登录状态的判断
  7. linux 中 svn 服务器搭建 重启
  8. JavaEE error整理(不断更新)
  9. TCP/IP中的传输层协议TCP、UDP
  10. 使用FormData,进行Ajax请求并上传文件