android 如何实现后台时用通知栏显示有新的消息,当在前台时不显示通知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 如何实现后台时用通知栏显示有新的消息,当在前台时不显示通知相关的知识,希望对你有一定的参考价值。

像qq一样,当不在前台时,来消息时,通知栏有 消息提示

前台界面和后台服务都接收同一个有序广播。前台界面优先级高,onResume是注册接收器,onStop时取消注册,接收到广播后就截断,不再向下传递给服务;后台服务优先级低,收到广播后拉起通知栏通知。
这样你打开前台界面后,就不会显示通知;前台界面关闭后,只有后台收到广播。
参考技术A 开一个广播监听,监听自己程序在后台还是前台,分别处理就好了啊追问

呵呵,我是新手,怎么监听,可以详细一点吗?非常感谢

追答

然后在判断是否显示通知

参考技术B 什么????……追问

qq消息提示,通知栏。就是在前台时,就不会出现通知栏

应用程序在后台时如何在android中获取推送通知?

【中文标题】应用程序在后台时如何在android中获取推送通知?【英文标题】:How to get Push notification in android when app is in background? 【发布时间】:2017-08-14 11:57:11 【问题描述】:

我正在开发一个 android 应用程序,用户可以在其中登录并查看收件箱中收到的消息(每条消息都包含已存储在我的数据库中的时间、日期、主题和发件人信息)。有一个收件箱按钮,将收件箱中收到的消息数量显示为标记通知,就像收件箱中存在 10 条消息一样,收件箱 10 显示为标记通知中的文本。我成功地做到了这一切,但我希望每当用户在其收件箱中收到任何消息时;用户将通过推送通知得到通知,无论是应用程序打开还是在后台。我搜索了很多,但我不知道从哪里开始。 各种帮助表示赞赏! 提前致谢。

【问题讨论】:

【参考方案1】:

您至少可以通过两种方式解决您的问题。

第一种方法是实现AlarmManager,它将启动服务,检查是否有新消息到达,如果是,您可以发出通知。但是这种方法的一些限制是你必须设置AlaramManager 来触发一次服务,例如每 15 分钟一次,如果同时消息到达,用户将不会被实时通知。实际上,您可以连续运行服务,但这是一种不好的做法,因为它会加快电池使用速度,并且如果需要可用空间,操作系统可能会终止服务。

第二种方法是使用一些第三方客户端,例如FCM,它是免费的,但每条消息(通知消息)限制为 4kb,实际上对于通知来说已经足够了。通常消息(通知消息)是从Firebase console 手动发送的,但第二个限制是,如果您想在用户离线时发出通知,您必须包含data payload 以触发onMessageReceived 并发出通知。如果您想在应用程序处于后台时执行此操作,您需要自定义服务器端逻辑,因为这在 firebase 控制台中是不可能的。幸运的是,有教程如何做到这一点。本教程将帮助您设置FCM: https://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

在这里您可以找到用于发送消息的自定义 PHP 服务器: http://demo.androidhive.info/firebase/notifications/

【讨论】:

【参考方案2】:

您可以使用Firebase Messaging

【讨论】:

以上是关于android 如何实现后台时用通知栏显示有新的消息,当在前台时不显示通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在后台的android应用程序图标上计算推送通知消息徽章

通知用户有新应用

如何在android上使用socket.io和后台服务?

当我有新的广告系列时,我的网站应用程序的通知

如何在Android后台服务中运行cordova插件?

当一个活动直接从一个通知启动时,你如何构建一个 Android 后台堆栈?