将数据从通知点击发送到子活动

Posted

技术标签:

【中文标题】将数据从通知点击发送到子活动【英文标题】:Sending data from notification click to child activity 【发布时间】:2020-09-06 17:34:55 【问题描述】:

我有两个活动,一个叫做 SplashActivity,它是启动器和应用程序的主要活动,第二个叫做 MainActivity,它是 SplashActivity 的子活动,基于一些事件,我创建了一个通知,当通知单击时我想要MainActivity 额外打开和发送数据。 我的问题是我已经尝试了所有摆在我面前的解决方案,但没有任何效果。

这是我当前的代码:

NotificationChannel channel = new NotificationChannel(String.valueOf(12), name, NotificationManager.IMPORTANCE_HIGH);
    channel.setDescription(description);
    // Register the channel with the system; you can't change the importance
    // or other notification behaviors after this
    NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
    notificationManagerCompat.createNotificationChannel(channel);

    // Create an Intent for the activity you want to start
    Intent notifyIntent = new Intent(getApplicationContext(), SplashActivity.class);
    notifyIntent.putExtra("notify", "notify");
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
            Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        // Create the PendingIntent
       PendingIntent notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT
                    | PendingIntent.FLAG_ONE_SHOT);


    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, String.valueOf(12))
            .setSmallIcon(R.drawable.logo)
            .setContentTitle(title)
            .setContentText(body)
            .setVibrate(new long[]0, 100, 1000, 300)
            .setAutoCancel(true)
            .setContentIntent(notifyPendingIntent)
            .setPriority(NotificationCompat.PRIORITY_HIGH);

    Notification notification = builder.build();
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    // notificationId is a unique int for each notification that you must define
    notificationManagerCompat.notify(12, notification);

清单中的两个活动声明:

    <activity
        android:name=".home.activities.MainActivity"
        android:parentActivityName=".SplashActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity" />

    <activity
        android:name=".SplashActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

有什么解决办法吗?以及为什么我当前的代码不起作用?

请帮帮我,我已经为此工作了两天。

【问题讨论】:

从 SplashActivity 打开 MainActivity 时可以添加代码吗? @CôngHải 我刚刚做了。 【参考方案1】:

您在启动 MainActivity 时忘记了 putExtra,您只显示日志。试试这个

        Intent i = new Intent(this, destinationActivity);
        i.putExtras(getIntent());
        Log.e(TAG, "navigateTo: " + getIntent().getStringExtra("notify"));
        startActivity(i);
        finish();

【讨论】:

日志文件中打印null的日志语句,我为什么要向MainActivity发送null值!! 如果收到通知,您应该将其传递给 MainActivity。因为intent start SplashActivity 有数据 没有来自意图的数据。 你为 SplashActivity 设置了什么启动模式?,我的意思是在 AndroidManifest 中 它没有启动模式。【参考方案2】:

尝试了一段时间后,我不知道问题出在哪里。

但我所做的是我使用了这段代码:

if (getIntent().getExtras() != null)
        getIntent().getExtras().keySet().iterator().forEachRemaining(new Consumer<String>() 
            @Override
            public void accept(String s) 
                Log.e(TAG, "accept: " + s);
            
        );

当活动从通知打开时打印出我拥有的额外键,我看到了一组独特的键,当它从通知打开时,我使用其中一个键作为特定操作的触发器。

【讨论】:

以上是关于将数据从通知点击发送到子活动的主要内容,如果未能解决你的问题,请参考以下文章

将 Angular 中的点击发送到 Google Pub/Sub

将鼠标点击发送到 WebEngineView Qt C++

将鼠标点击发送到另一个应用程序的 X Y 坐标

字符串参数未从本地通知发送到活动

通过 Chrome 开发工具控制台将点击发送到“生成的源/计算的 html”按钮

使用 C# 将鼠标单击发送到任务栏中的按钮