如何在点击推送通知消息时打开特定的片段?

3

我希望在推送通知消息被点击时打开特定的片段。目前,当通知到达时,片段是打开的。但我想在通知消息被点击时打开该片段,而不是在消息到达时打开。

这是我的sendNotification()方法:

 private void sendNotification(String msg) {

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


        Intent intent = new Intent(this, MainActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("data", "fromoutside");
        getApplicationContext().startActivity(intent);

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);


        NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setSmallIcon(getNotificationIcon())
                .setContentTitle("Telepoh")
                .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                .setContentText(msg)
                .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);

        mBuilder.setContentIntent(contentIntent);
        mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
        mBuilder.setAutoCancel(true);


        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    } 

这是我在MainActivity中重写的onNewIntent()方法,用于打开片段:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Fragment fragment = new NotificationActivity();
        getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).addToBackStack(null).commit();

    }

我的问题是,我希望在点击推送通知消息时打开此片段,但在我的情况下,当推送通知消息到达时,该片段已经打开了。


sendNotification()方法中为意图添加一个动作(确保它是唯一的)。然后,在onNewIntent()中获取动作,仅在正确的意图到达时打开片段。 - Abbas
我尝试了这种方法,但它不起作用!如果我犯了任何错误,你能否写一些代码。 - LoveAndroid
添加你的 AndroidManifest.xml - Abbas
请检查更新后的代码。在我的主活动中,我添加了android:launchMode="singleTop"。 - LoveAndroid
@LoveAndroid 哦,我明白了。我添加了一个答案,希望这能解决你的问题。 - Zach
显示剩余2条评论
2个回答

6
我发现错误并按照自己的方式解决了它:-
将sendNotification()方法中的标志改为以下内容:-
  Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("data", "fromoutside");


        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

在MainActivity中,将onNewIntent()方法的代码更改为以下内容:

 @Override
            protected void onNewIntent(Intent intent) {
                super.onNewIntent(intent);

                if (intent != null) {

                    String data = intent.getStringExtra("data");

                    if (data != null) {

                        Fragment fragment = new NotificationActivity();
                        getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).addToBackStack(null).commit();

                    } 


                }


        }

愉快编码:))


0

这些代码行在listener或其他条件之外,因此立即启动了新的activity。

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("data", "fromoutside");
getApplicationContext().startActivity(intent);

从我看来,你只需要删除上面的4行。

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
...
mBuilder.setContentIntent(contentIntent);

这些代码行足以在单击时启动您的通知意图。

参考链接:通知开发者指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接