问题的提出

本次接入的是个推,其他家的推送没有研究过,思路应该是类似的

App在前台,这个时候需要弹出一个对话框,提醒用户有新的消息,是否要查看,查看的话跳转到指定页面

App在后台,或是App进程已经被系统回收,收到推送后App进程会被个推拉起。这时候要展示通知,点击通知栏打开App并跳转到目标页面,关闭目标页面后需要返回到应用首页,而不是直接推出App

实现思路

App在前台时,弹出Dialog提醒用户有新消息,但是最新版的个推文档接收推送消息是继承IntentService,无法获取弹出Dialog所需要的Context(注意不能用getApplicationContext()),所以采用Dialog样式的Activity来实现

App在后台时,如果直接在PendingIntent中传目标Activity的Intent,则在退出目标Activity时会直接退出应用,感觉像是闪退了一样;如果是跳转到首页,然后在首页中检测是否是由点击通知进入应用的来进行跳转,这样的话首页就会闪屏。综上方法都不是很理想,一个比较好的解决方案是给PendingIntent传递一个Intent数组,分别放置目标Activity和首页,这样效果比较好

App在前台时,弹出Dialog样式的Activity

设置Activity样式

false

@null

true //去掉标题

@android:color/transparent //背景透明

true //设置触摸弹框外面是否会消失

true

@null

true

AndroidManifest.xml

android:name=".getui.AlertDialogActivity"

android:theme="@style/AlertDialogActivityTheme">

此处需要注意的是这里的Activity继承的是AppCompatActivity,如果是继承Activity,则一些属性设置需要微调,比如去掉标题要改为

true

以上设置以后还需要设置弹框的大小

public class AlertDialogActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.dialog_activity);

//设置弹框大小,此处宽度为屏幕宽度减去160像素

getWindow().setLayout(DeviceUtil.getDisplayParametersW(this)-160, ViewGroup.LayoutParams.WRAP_CONTENT);

getWindow().setGravity(Gravity.CENTER);

initView();

}

}

App在后台或是已经被销毁

我们在接收到推送消息时都会弹出通知,这里只需要对常用的弹出通知方式进行微调一下

//关键的地方

PendingIntent contentIntent = PendingIntent.getActivities(context, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)

//省略其他的一些设置

.setContentIntent(contentIntent)

//省略其他的一些设置

Notification notification = builder.build();

notification.flags = Notification.FLAG_AUTO_CANCEL;

mNotificationManager.notify((int) System.currentTimeMillis() / 1000, notification);

上面关键的改动就在PendingIntent,里面的intents参数存放首页Activity和目标Activity,比如

Intent[] intents = new Intent[2];

Intent intent_main = new Intent(getApplicationContext(), MainActivity.class);

Intent intent_target = new Intent(getApplicationContext(), TargetActivity.class);

intents[0] = intent_main;

intents[1] = intent_target;

通过以上的设置后,点击通知栏就会打开TargetActivity,从TargetActivity返回后会打开MainActivity,而不会直接退出

需要注意的是,MainActivity需要设置启动模式为singleInstance

AndroidManifest.xml

android:name=".ui.main.MainActivity"

android:launchMode="singleInstance" />

以上就是接收推送消息后的跳转的一些内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android点击通知跳转到服务,Android 接收推送消息跳转到指定页面的方法相关推荐

  1. 服务端如何推送消息给客户端?

    大家好,我是前端西瓜哥,今天带大家了解一下服务端如何推送消息给客户端. 有时候,我们希望服务端能够主动推送一些信息给客户端.但 HTTP 协议只能让客户端发起请求然后服务端响应,而无法让服务端主动去发 ...

  2. 如何在微信服务号每天推送消息?

    微信规则群发全部粉丝服务号每月4次,订阅号1天1次,服务号还有模板消息接口支持全部粉丝群发,除此之外所有微信提供的接口都不支持.只有满足特定场景的粉丝才能不限制地对粉丝推送消息,微号帮平台对此提供了4 ...

  3. android自定义push通知_20个海外Web和App推送通知服务工具

    在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...

  4. iOS点击推送消息跳到应用指定页面

    现在的推送用的越来越频繁,几乎每个应用都开始用到了.其实又有几个用户会去看推送消息呢?没办法,产品经理最大啊,只是苦了我们这一帮程序员啊!闲话少说,进入正题.兄弟我用的是极光推送,自然是以极光推送为例 ...

  5. iOS 点击推送消息跳转指定界面 —总结篇

    收到推送的准备: 首先至于说消息推送的原理,证书配置等等这些我在这里就不在累述,有很多写的很好的文章相信您已经可以搞定这块,这里我重点讲下各种情况下的跳转处理. 复制代码 ####点击推送触发的几个方 ...

  6. php 通知客户端,PHP+SSE服务器向客户端推送消息

    SSE与WebSocket作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送信息. 但是WebSocket比SSE强大很多,SSE只能作为一个轻量级的消息推送方案,解决了从服务端向 ...

  7. JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息

    客户端代码: package com.lcx.socket;import java.io.BufferedReader; import java.io.BufferedWriter; import j ...

  8. 微信公众号消息推送开发(模板消息):点击推送消息跳转到网页或者小程序(三)

    需求场景: 点击推送的消息后跳转到小程序中的某个页面,或者跳转到某一个网页上,例如有这样一个需求,在商城平台购买产品后,需要通过公众号给用户推送订单详细并且点击消息可以看到对应的订单详情.以下我将在微 ...

  9. Android之集成极光推送消息

    极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式: 通知 自定义消息 富媒体 本地通知 1.通知 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通 ...

最新文章

  1. 你不会编程,不是你不行,很有可能是老师教的方法不好。科学家发现:对大脑而言,代码编程与语言学习不同...
  2. 系统自动化安装kickstart
  3. [Unity3D]Script 脚本所有编译器属性详解
  4. Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数
  5. 天池 在线编程 卡牌游戏(01背包)
  6. 小米路由器R4 TTL刷不死Bread第三方固件写入升级
  7. 11.Django中常用过滤器
  8. 如何在PowerPoint中添加幻灯片编号
  9. [原]基因组变异检测概述
  10. 2021-04-19一万小时定律
  11. 基于主定理以及递推树求解递归算法的时间复杂度
  12. Windows把桌面改到D盘 Win11怎么把桌面文件路径改到D盘
  13. 基于MATLAB燃料电池控制系统测试平台
  14. poi ppt 作者属性 修改_Poi PPT PPTX 处理 [生产环境使用]
  15. 【软件工程——UML基础教程】
  16. Android开发:隐藏和显示底部导航栏
  17. 如何学习数值模拟(一)
  18. [深度学习论文笔记]UNETR: Transformers for 3D Medical Image Segmentation
  19. 前端向后端传对象数组--方式一
  20. 前端最全面试题整理(持续更新)

热门文章

  1. 基于TensorFlow开发人脸识别
  2. 申请Let's Encrypt的证书
  3. 听说面试又挂在计算机操作系统了?仔细看看这个!!!【强烈推荐】
  4. 那么到底什么是热点???
  5. leetcode 781. Rabbits in Forest | 781. 森林中的兔子(Java)
  6. 面试必会系列 - 1.6 Java 垃圾回收机制
  7. JavaScript 检查对象属性
  8. java安全编码指南之:表达式规则
  9. 基于python技术的自动化运维是干嘛的_《Python自动化运维 技术与最佳实践》.pdf...
  10. C++学习笔记:(五)继承 多态