当应用程序处于后台/未运行时,不打开通知单击上的特定活动

2024-03-22

仅当打开应用程序并执行通知单击时,通知单击才会启动指定的活动。如果应用程序处于后台/未运行并且执行了通知单击,则应用程序的 MainActivity 将打开。简而言之,就像应用程序按照 Activity 堆栈正常打开一样,而不是打开 PendingIntent 中指定的 Activity。

我想根据其类型将通知点击重定向到两个不同的活动(ApprovalDetailActivity 和 ConversationDetailActivity)。

我正在使用 FCM 进行推送通知。我将清单文件和 FCMListener 文件粘贴到此处。请帮帮我。

发送通知()MyFirebaseMessagingService.java 中的函数

private void sendNotification(String messageBody)
    {
        Intent intent;
        System.out.println("----message body: " + messageBody);
        if(notificationBundle.getCategory().equalsIgnoreCase(Master.KEY_PUSH_NOTIFICATION_CONVERSATION))
        {
            intent = new Intent(this, ConversationDetailActivity.class);
            /*Conversation conversation = Master.notificationBundle.getConversation();
            Master.conversationsList = new ArrayList<>();
            Master.conversationsList.add(conversation);*/
        }
        else
        {
            intent = new Intent(this, ApprovalDetailActivity.class);
            if(notificationBundle.getApprovalType().equals("I"))
                intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_VERIFICATIONS);
            else if(notificationBundle.getApprovalType().equals("A"))
                intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_APPROVALS);
            else
                intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_COMPLETED);

            intent.putExtra(Master.KEY_IS_FROM_CONVERSATION, false);
        }

        intent.putExtra(Master.KEY_PUSH_NOTIFICATION_POST_ID , notificationBundle.getPostID());
        intent.putExtra(Master.KEY_IS_FROM_PUSH_NOTIFICATION, true);
        intent.putExtra(Master.KEY_POSITION, 0);

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.mnet_icon)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        int random = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE);
        notificationManager.notify(random, notificationBuilder.build());
    }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="mnet.mediaware.com.m_net">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:name=".MnetApplication"
        android:allowBackup="true"
        android:icon="@drawable/mnet_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".activities.LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_main"
            android:launchMode="singleTask"
            android:theme="@style/AppTheme.NoActionBar" />

        <activity
            android:name=".activities.ConversationDetailActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_conversation_detail"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:launchMode="singleTask"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <intent-filter>
                <action android:name="mnet.mediaware.com.m_net.activities.ConversationDetailActivity" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
            </intent-filter>

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="mnet.mediaware.com.m_net.activities.MainActivity" />
        </activity>
        <activity
            android:name=".activities.ApprovalDetailActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_approval_detail"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="mnet.mediaware.com.m_net.activities.MainActivity" />
        </activity>
        <activity
            android:name=".activities.NewConversationActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_new_conversation"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="mnet.mediaware.com.m_net.activities.MainActivity" />
        </activity>
        <activity
            android:name=".activities.NotificationActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_notification"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="mnet.mediaware.com.m_net.activities.MainActivity" />
        </activity>
        <activity
            android:name=".activities.ProfileActivity"
            android:label="@string/title_activity_profile"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="mnet.mediaware.com.m_net.activities.MainActivity" />
        </activity>

        <service
            android:name=".utils.firebase.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>

        <service
            android:name=".utils.firebase.MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>

    </application>

</manifest>

根据 Firebase Cloud Messaging 文档 - 如果 Activity 位于前台,则将调用 onMessageReceived。如果活动在后台或关闭,则通知消息将显示在应用程序启动器活动的通知中心。欲了解更多信息,请查看此链接 https://firebase.google.com/docs/cloud-messaging/android/receive

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当应用程序处于后台/未运行时,不打开通知单击上的特定活动 的相关文章

随机推荐

  • 当用户在 HTML 文本输入上键入退格键时,如何避免向后导航?

    退格键是浏览器热键 用于 返回到最后一页 我知道当输入获得焦点时 该热键将被禁用 但是我有 keyup 和 keydown 事件绑定到这个输入 而我写的一些东西导致了这个问题 你知道解决办法吗 当您处理了来自输入元素的事件后 请在返回之前取
  • Plotly:在 R 中的每帧中对可变数量的轨迹进行动画处理

    我想对一组帧进行动画处理 其中每个帧可能具有不同数量的轨迹 如 此处 所述1 https community plotly com t animating a variable number of traces in each frame
  • QPainter::drawPixmap() 看起来不好看而且质量低?

    我正在尝试在 a 内绘制一个图标 png QWidget with QPainter drawPixmap QPixmap source png painter setRenderHint QPainter HighQualityAntia
  • 带offline.html 备份页面的Service Worker

    我无法显示offline html 页面 我不断得到The FetchEvent for https my domain com resulted in a network error response a redirected respo
  • 开源 .Net Jabber/XMPP 服务器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 Net 中见过不少 XMPP 客户端的例子 也见过不少不同语言的服务器 但我正在寻找 Net 版本
  • 单个进程中的多个应用程序域

    大家好 我想问大家一个与应用程序域相关的问题 在 Net中 appdomain充当安全边界 两个应用程序可以在同一进程内的两个不同域中运行 但是当我尝试运行一个exe的多个实例时 它显示在任务管理器中的不同进程中 为什么会这样呢 为什么它不
  • 使用正则表达式在 javascript 中进行全词搜索

    我正在尝试使用以下正则表达式在 javascript 中执行整个单词搜索 str Test String C S example var regex search new RegExp b search string b g if str
  • MOVDQA 和 MOVAPS x86 指令之间的区别?

    我正在查找英特尔数据表 英特尔 64 和 IA 32 架构 软件开发人员手册我找不到两者之间的区别 MOVDQA 移动对齐的双四字 MOVAPS 移动对齐压缩单精度 在英特尔数据表中我可以找到这两条指令 该指令可用于从 128 位加载 XM
  • 从 .Net Core 使用 JAR

    如何使用 Net Core 内的 JAR 显然是用 Java 开发的 在 Net世界中 我们可以将其注册为COM组件并访问它 我知道 Net Core 还不支持 COM 组件 IKVM JNBridge 等库尚不支持 Net Core CO
  • Serilog 不将日志发送到 Elasticsearch 8

    I used ELK堆栈来记录应用程序错误 但是Serilog不登录弹性搜索 使用的elasticsearch版本是8 3 2 登录配置program cs builder UseSerilog hostBuilder servicePro
  • VSTS 中 .NET Core 项目的代码覆盖率和测试结果

    如何在 VSTS 中启用 NET Core 项目的代码覆盖率和测试结果 目前 尚未为 NET Core 测试任务启用它 这是一个答案的一半 因为我不喜欢代码覆盖率 首先得到dotnet test通过传递参数来输出包含测试结果的 trx 文件
  • 如何在 razor MVC asp.net 中组合两个视图模型

    假设我有一些模型如下 public class Model1 public int ID get set public string Name get set public class Model2 public int ID get se
  • 是否可以将现有的 Windows Phone 8 应用程序更新到 Windows Phone Store 8.1

    我在 Windows Phone 应用商店中有一个 Windows Phone 8 0 应用程序 我想将我的应用程序更新到 Windows Phone 商店 API 而不是 Windows Phone Silverlight 8 1 以准备
  • liferay 7 中 liferay-portlet.xml 的等效文件是什么?

    我想在 liferay 7 中添加自定义用户通知 为此 如果我使用 liferay 6 2 我必须输入类似用户通知定义 and 用户通知处理程序类在 liferay portlet xml 中 但在liferay中我想问一下把这些条目放在哪
  • 如何从 Amazon Kinesis 流获取最新记录?

    我想从 Amazon Kinesis 流中获取最新记录 我打算从该记录中提取时间戳 并将其与消费者应用程序检查点的最后一个记录的时间戳进行比较 以检查消费者是否落后 我无法使用最新的分片迭代器类型 这是因为 LATEST 指向最近的记录之后
  • Richfaces modalPanel 使用 Ajax 加载

    我在我的项目中使用了 richfaces 特别是标签 rich modalPanel 它允许在页面中显示弹出窗口 为此 我添加了这样的弹出窗口
  • 如何将 reCAPTCHA 设为必填字段?

    我正在使用 Google reCAPTCHA 并且能够将 CAPTCHA 组件添加到表单内的页面中 但是当我提交表单时 没有进行验证来检查验证码是否已解决 提交表单时如何验证验证码组件已被解析 或者 换句话说 如何使我的验证码组件成为必需的
  • NestJS,如何以及在哪里构建响应 DTO

    我一直在使用Java Spring框架来开发微服务 最近 我开始探索 NestJS 并有一个关于构建响应 DTO 的问题 在春天 控制器是轻量级的 它们将调用交给服务层 服务层实现业务逻辑 最后 它们调用负责构建响应 DTO 的 Mappe
  • 在 d3.js 中绘制滚动/移动平均值

    寻找一种在 d3 中绘制滚动 移动平均值的方法 而无需提前操作数据 所以我想通过对每个数据点及其后面的两个数据点进行平均来平滑这条线 我的代码是这样的 var data 3 66 2 76 5 20 1 3 8 90 2 5 70 var
  • 当应用程序处于后台/未运行时,不打开通知单击上的特定活动

    仅当打开应用程序并执行通知单击时 通知单击才会启动指定的活动 如果应用程序处于后台 未运行并且执行了通知单击 则应用程序的 MainActivity 将打开 简而言之 就像应用程序按照 Activity 堆栈正常打开一样 而不是打开 Pen