由通知栏进入到应用的尝试
按:
将根据需求,写写整个思路。
一,需求
应用第一次启动后,在通知栏里显示FLAG_ONGOING_EVENT类型的通知。点击之后消失,将在以下三种情况下,回到应用:
第一种: 当前显示------------------回到当前页
第二种: 后台------------------------回到当前页
第三种: 退出应用-----------------启动应用
一些启发:很显然,launcher的启动方式完美解决以上三种情况,并且可以预估,代码量将会很少。
原因:通知是事件滞前性的,我们先设定了PendingIntent,但是当在应用中浏览时,之前制定的pendingIntent已经不能到达我们的当前页面。
对比之下,简单的猜测了下launcher启动应用的原理,显然,launcher之所以能很好的处理以上三种情况,是因为,它是事件滞后的。流程如下:
step2: 获取此包名下的activity task,得到topAcitivty
step3: intent指向此topAcitivity即可。
通过方案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);}
做了验证:
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
由通知栏进入到应用的尝试相关推荐
- 优化安卓应用内存的神奇方法以及背后的原理,一般人我不告诉他
安卓应用一般都害怕自己被杀.内存占用高是被杀的重要原因之中的一个.所以大家都想尽各种招数应对,但效果都一般. 但有一招: WindowManagerGlobal.getInstance().start ...
- android 获取已安装列表权限,Android 如何完整的获取到用户已安装应用列表
接到产品经理的预研需求,说希望获取用户已安装应用列表.这个问题应该不难,只要是要把相关的知识点整理和验证一下. 对于获取用户已安装应用列表,我个人是很熟悉的,因为我的华为手机上,手机管家天天会在通知栏 ...
- android11测试版下载,Find X2系列 Android 11 Beta1 测试版发布,你要尝试一下吗?
原标题:Find X2系列 Android 11 Beta1 测试版发布,你要尝试一下吗? 今年的特殊情况导致安卓11发布日期的一波三折,然而最后谷歌还是在6月11日发布了安卓Beta1版本.有趣的是 ...
- 手机热点总是正在连接服务器,手机热点用不了?可以尝试这个方法。
原标题:手机热点用不了?可以尝试这个方法. 下班路上,上司突然打来"夺命连环call",早上的方案需要赶紧改一下.无奈,只能拿出笔记本在地铁上临时办公,关键时候连接手机热点,却发现 ...
- swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用
swift通知栏推送 by Neo Ighodaro 由新Ighodaro 如何使用Swift使用推送通知构建食品交付应用 (How to build a food delivery app with ...
- android 弹窗 onpause,Android 下拉通知栏时Activity的生命周期——重新理解onPause()
下拉通知栏时发生了什么 在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的.在网上众多关于Activity生命周期的讨论中,很多人认为onPaus ...
- Android通知栏字体大小,Android通知栏介绍与适配总结(上篇)
此文已由作者黎星授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知 ...
- 关于极光推送通知栏无法正确显示应用图标
今天在集成极光推送的时候遇到了一个很无奈的问题,在推送时应用的通知图标一直显示极光的图标,折腾了许久也没折腾出来. 我先是将demo的包名改成自己的应用包名跑了一次,效果还行,然后就根据文档将推送sd ...
- Delphi 监听安卓(Android)手机通知栏信息
Delphi 监听安卓(Android)手机通知栏信息 因为一些业务需要,我们有时候需要知道手机通知栏显示的信息,然后根据这些信息去处理一些相应的业务逻辑.如:自动监听收到的短信验证码,提取后自动填写 ...
最新文章
- 扛住100亿次请求?我们来试一试!
- 一文读懂机器学习中的正则化
- 数字化?智能化?中国企业智能制造现状究竟如何 李炳积 工信头条 昨天
- IT界顶级大咖讲解如何获得月薪5万以上的秘诀干货!
- 1.2、什么是函数?什么是方法
- f2 自适应_典型的三行二列居中高度自适应布局
- oculus ios学习资料整理
- DataFrame 学习笔记
- 厦门大学和福州大学计算机专业哪个好,福州大学和厦门大学的土木工程哪个好...
- Mysql 优化的一些要点
- mysql取最大一条数据,mysql取出表中,某字段值最大的一条纪录,sql语句
- [snmp++]读取cisco路由交换机信息[一] - 环境搭建
- 利用两款软件实现图片转文字
- 我对STL的一些看法(三)认识list容器
- flash动画制作作品_flash施工动画制作应该展现哪些内容
- arraylist 线性不安全_Java面试系列(一)--集合类ArrayList
- 【通信仿真】基于matlab蒙特卡罗算法2FSK系统抗噪声性能仿真【含Matlab源码 1632期】
- ie浏览器样式兼容写法_浏览器兼容性以及写法
- 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)
- Linphone android去电增加自定义SIP消息头的流程分析