APP接收通知处理逻辑项目实战经验总结

Android 音乐APP(五)音乐通知栏、后台播放音乐 都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。Java语言与原理;大厂,小厂。Android面试先看你熟不熟悉Java语言高级UI与自定义view。 阅读详情

说在前面:
关于Notification,我之前写过两篇博客,分别为Android之Notification详解和Android O通知适配。
今天,我们来对APP接收通知处理逻辑进行项目实战经验总结。

正文:
说到通知,我们能想到的最简单的场景:点击手机上接收到的通知,跳转到对应的详情页。对应的代码示例如下:

        Intent mainIntent = new Intent();
        mainIntent.setClass(this, OrderManagementActivity.class);
        mainIntent.putExtra("orderId", orderId);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification;
        if (Build.VERSION.SDK_INT >= 26) {
            String channelId = "order";
            String channelName = "订单消息";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(channelId, channelName, importance, notificationManager);
            notification = new Notification.Builder(this, channelId)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("收到一条待支付订单,查看详情")
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .build();
        } else {
            notification = new Notification.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("收到一条待支付订单,查看详情")
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .build();
        }
        notificationManager.notify(0, notification);
    @TargetApi(26)
    private void createNotificationChannel(String channelId, String channelName, int importance, NotificationManager notificationManager) {
        NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
        notificationManager.createNotificationChannel(notificationChannel);
    }

但是,这只是在理想化的情况下,真实的用户场景千变万化,千奇百态。举例如下:
1、(前提:APP设置为自启动)来了一条通知,对应的Intent我设置成跳转至对应的详情页,然后这时我将APP的进程手动kill掉,通知还在,此时点击通知还是跳转至对应的详情页,显然这是不合理的。此时,点击通知,应该是先启动APP。
2、来了一条通知,对应的Intent我设置成跳转至对应的详情页,然后这时我退出APP账号,通知还在,此时点击通知还是跳转至对应的详情页,显然这是不合理的。此时点击通知应该先跳转至登录界面。
3、(前提:APP设置为自启动)APP的进程被kill掉,然后来了多条通知,点击其中一条通知,启动APP,最终跳转至对应的
详情界面。此时,再点击其他通知,还是启动APP,并最终跳转至对应的详情界面,显然是不合理的。此时应该直接跳转至对应的详情界面。

造成以上问题的原因在于:我们把逻辑判断放在了创建通知的时候。因为如果把逻辑判断放在了创建通知的时候,当在创建通知之后点击通知之前的这段时间,对当初逻辑判断结果产生影响的条件发生了变化,那么将出现我们不想要的结果。

那么应该怎么做呢?有两种方案。
方案一:
弄一个路由Activity,即:点击通知都是首先跳转至这个路由Activity,在这个Activity中进行
相应地判断,然后进行相应地跳转。
但是有一个明显的缺点,就是要多一层Activity跳转,并且对用户体验的影响是很明显的。因为在
某种情况下是完全可以跳转至目标Activity的,而这里还要先经过一个路由Activity。并且我参考了
微信、微博、今日头条等APP,都没有采用这种方案。

方案二:
监听通知点击,并在点击通知的时候进行判断。
这里我们需要使用到BroadcastReceiver。
实现步骤如下:
1、创建一个NotificationClickReceiver,继承BroadcastReceiver。并在AndroidManifest中进行注册。
2、在创建通知的地方做如下改动(结合上述示例代码):

mainIntent.setClass(this, OrderManagementActivity.class);
改成
mainIntent.setClass(this, NotificationClickReceiver.class);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
改成
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);

3、在NotificationClickReceiver中重写onReceive方法,在onReceive方法中进行逻辑判断。

Android 音乐APP(五)音乐通知栏、后台播放音乐(1) 【Android开发核心知识点笔记】【Android思维脑图(技能树)】【Android核心高级技术PDF文档,BAT大厂面试真题解析】【Android高级架构视频学习资源】《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!ndroid工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** 阅读详情

相关推荐

点击通知栏里的通知启动App

点击通知栏里的通知启动App(在App被杀死的情况下) - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {          self.window = [[UIWindow alloc] in

京津追梦人 2388

iOS10 远程推送代码 以及服务器端代码(.net)

// // AppDelegate.m // MyPushDemo // // Created by justapple on 16/12/25. // Copyright © 2016年 dengqi. All rights reserved. // #import "AppDelegate.h" #import <UserNotifications/Use...

weixin_30456039的博客 307

APP唤起手机微信进行在线支付,并接收回调通知处理业务逻辑,已封装SDK使用非常简单

该代码实现了一个基于ThinkPHP框架的微信支付功能,主要包含两个核心方法:支付请求处理(shujiBuy)和支付回调处理(shujiBuyNotify)。支付请求方法通过微信SDK创建支付订单,验证订单参数并返回支付所需信息;回调方法处理微信支付结果通知,验证签名后更新订单状态。代码使用了数据库事务确保数据一致性,并提供了XML与数组转换、签名验证等工具方法。支持APP支付方式,通过配置微信商户参数实现支付对接。

hanzhuhuaa的博客 212

关于安卓判断通知权限

与相机等权限大体一致,通知权限也是系统权限之一,开启该权限的方法有两种。一种是直接打开app的系统设置页面,找到通知管理,开启通知即可。但是大部分app是会有提醒功能,如果app没有开启通知权限,会弹出一个弹框,引导用户跳转到设置页面去手动开启。

怎么可以吃恐龙呢 4209

Android通知栏接收第三方应用通知开关

我们首先在AndroidManifest.xml文件中声明了必要的权限,然后创建了一个继承自NotificationListenerService的服务类,并在其中重写了onNotificationPosted方法来处理通知。我们还在AndroidManifest.xml中声明了我们的NotificationListenerService,并提供了一个开关来控制是否接收第三方应用的通知。在某些情况下,我们可能需要在我们自己的应用中接收其他第三方应用发送的通知,并且需要有一个开关来控制是否接收这些通知。

techDM的博客 539

uni-app消息通知JAR集成实战

本文还有配套的精品资源,点击获取 简介:uni-app是一款跨平台开发框架,"gexin.zip"包含了uni-app消息通知需要的JAR文件。本课程设计项目将指导学生集成极光推送(JPush)的JAR文件,实现uni-app应用的消息推送功能。学生将学习如何引入JAR文件、配置项目、初始化服务、处理消息,以及处理不同状态下的消息接收情况。通过实践任务,学生将掌握uni-a...

weixin_42589700的博客 1057

手机系统消息通知设计的整理和分析

当应用程序不处于前台运行中时,消息通知能将某些信息及时告知用户。比如收到新消息、收到新邮件、程序下载已完成或者待办事项即将开始等。目前各移动平台上对消息通知的设计均有所差别,各有利弊。这里整理了iOS、Android、Palm Web OS、Windows Phone和未揭开面纱的Meego这五个系统对消息通知的处理方式,并分析了它们各自的优缺点。希望能对研发过程中的设计选择有所帮助。另外这里主要

有家客栈 君子不器 1385

国产安路FPGA(二)-TD软件时序约束与硬件调试实战

本文深入探讨了国产安路FPGA开发中TD软件时序约束的实战应用。文章详细解析了SDC文件的核心语法,包括基础时钟、生成时钟及输入输出延迟约束的编写方法,并针对硬件调试中常见的时序问题提供了解决方案。通过一个图像处理流水线的优化案例,阐述了如何结合代码修改与约束设置,实现设计从“能跑”到“跑得稳”的关键提升,是掌握FPGA可靠设计的实用指南。

weixin_29183637的博客 376

聊聊消息中心的设计与实现逻辑

消息通知的流程设计,在各个业务线中通过消息中心提供的接口方法,将不同场景下的消息内容提交到消息中心,消息中心进行统一维护管理,并根据消息的来源和去向,适配相应的推送逻辑。

【积累】,是一个长期持续的过程。 2465

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题

本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。

sony5的博客 1380

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1418

推送通知的跳转处理和消息提醒

转载请注明出处:http://blog.youkuaiyun.com/Chay_Chan/article/details/72640876推送通知的跳转处理和消息提醒  消息推送功能在App开发中经常用到,用于及时通知用户,推送用户订阅的相关的信息。本篇文章并非详细介绍如何集成和使用推送,关于推送相关知识的介绍,郭神已经在慕课网中有相关的教程,大家如果想要深入研究,可以去观看郭神的相关视频。效果演示一、App处

Chay_Chan的博客 2万+

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2380

iOS 监听用户是否开启通知权限弹窗逻辑

前言 推送对App的重要性不言而喻,APP里的某些内容是需要用户开启推送权限才能给用户精准展示,才能及时通知用户。 下面我们通过一个demo实现对推送的监听,以及弹窗的效果,希望能帮助到大家。 效果图如下: 一、在AppDelegate里添加以下代码可以使APP弹窗通知权限框 #pragma mark ==========请求用户给权限========== - (void)registerPushNotificationAuthorization:(UIApplication *)application{

smileKH的博客 5740

AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral

本文详细解析AUTOSAR基础软件(BSW)模块的通用规范,涵盖其分层架构、配置管理、初始化流程和状态转换机制。AUTOSAR采用清晰的分层设计,包括应用层、服务层、ECU抽象层和微控制器抽象层,各层模块通过标准化接口交互。BSW模块配置采用类型化定义,支持预初始化、初始化和后期构建配置。文档还阐述了模块初始化流程中的依赖管理,以及运行时的状态转换与错误处理机制,为汽车电子控制单元的标准化开发提供规范指导。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1125

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载)

摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

iOS APP关闭推送通知后的消息处理逻辑

用户接受推送通知:APP未运行时,程序在启动后检查新消息;APP在运行时,程序接收通知后检查新消息 用户关闭推送通知:APP未运行时,程序在启动后检查新消息;APP在运行时,程序无法收到通知,有三种方式来处理 1. 建立长连接,服务器有新消息时推送给...

633

低功耗设计-Power Switch

power gating与power switch cell

m0_61544122的博客 1万+

鸿蒙系统中如何实现系统级通知监听与处理?

在现代操作系统中,通知是应用程序与用户交互的重要方式。在鸿蒙系统中,通知不仅用于展示应用的信息,还可以帮助系统和应用进行事件响应、消息推送、任务提醒等。而对于某些应用(如通知助手、信息管理类应用等),监听和处理系统级通知是一个非常重要的功能。本文将介绍如何在鸿蒙系统中实现系统级通知监听与处理,包括如何使用注册监听、如何过滤通知内容与类型、UI展示与数据持久化的逻辑、以及在实现通知助手App时需要注意的合规与隐私问题。通过鸿蒙的,开发者可以方便地实现系统级通知的监听与处理。

小白酷爱学编程,欢迎大家一块儿学习~~ 1381

RK3399平台开发系列讲解(内核入门篇)1.2、如何高效的阅读Linux内核设备驱动

内核开发在很大程度上并不是重新造“轮子”的过程,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,我们才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。如果过分强调不必要的“自主创新”,可能会让内核的可维护性变差,最终结果反而得不偿失。 那么此次就分享就围绕如何高效的阅读内核驱动代码:

内核笔记 7341

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

电商App适配Android 12显式值要求的实战经验

尽早进行API级别检查最好在应用启动时就检查API级别,对不同的Android版本采用不同的策略。全面测试各种场景不仅要测试正常流程,还要测试应用未启动、后台运行、被杀掉后恢复等各种边界情况。注意厂商定制ROM有些国产手机厂商对Android做了深度定制,可能会影响显式Intent的行为。考虑向后兼容虽然Android 12强制要求显式值,但我们还是需要保持对旧版本Android的支持。

CrystalwaveStag的博客 1017

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android接收服务器推,Android 关于 个推消息透传处理

刚开始接触个推消息透传的童鞋不知道如何处理服务器发送过来的透传消息因为它不像推送通知那样简单 直接会弹出通知框 透传消息需要自己处理然后自己定义弹出框下面先看一下个推服务类处理package com.app.push;import android.content.Context;import android.os.Message;import android.util.Log;import com...

weixin_35942339的博客 700

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何实现IOS APP被杀掉后依然可以接收到个推消息通知

这个是咨询个推的技术人员后才得知的,说是混编的问题,如果是Swift项目需要加一个OC文件,如果是OC项目需要加一个空的Swift文件。安装到手机上后,将APP退出到后台后,稍等片刻,在个推控制台上查询当前设备的CID,检查CID的状态是否为离线,如果已经为离线了,可以通过个推的控制台推送测试消息,然后观察手机上收到的消息是否包含。项目已经集成了个推SDK,但是在离线场景下无法收到推送消息,离线场景主要分2种情况,一种是用户将APP切换到了后台,一种是用户将APP杀掉了。字符,如果有,说明大功告成了。

一枚自我成长的程序猿 2778

android 点击通知栏打开activity,Android通知栏,点击唤醒APP,跳转到指定Activity,终极方案...

这个功能基本上每个app都会需要,希望能帮到你。1、接收消息:接收推送的消息,一般有两种:自己的推送服务和第三方推送服务。不管是哪一种,都会按照app的需求接收到不同类型的消息,然后在需要弹notification的地方通知。这是句废话2、弹出notification:此时,需要指定一个PendingIntent,如果用户在app内部或是点击手机home键退到后台,此时ActivityManage...

weixin_39637614的博客 3055
上一篇: java中去除数组重复元素
下一篇: DES加密/解密
zdj_develop
博客等级 码龄11年 56粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值