【问题标题】:How to open particular fragment on the click of the push notification message?如何在单击推送通知消息时打开特定片段?
【发布时间】:2016-09-08 05:26:26
【问题描述】:

我想在点击推送通知消息时打开特定片段。在我的情况下,片段在通知发生时打开。但我想在点击通知消息时打开片段,而不是收到消息。

这是我的 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() 中获取 Action 并仅在正确意图到达时打开片段。
  • 我试过这个方法,但它不起作用!如果我做错了,请你写一些代码。
  • 添加您的AndroidManifest.xml
  • 请检查更新后的代码。在我的主要活动中,我添加了 android:launchMode="singleTop"。
  • 只是想知道,为什么要创建一个已经打开的新片段?我想我可能误解了这个问题

标签: android android-intent push-notification google-cloud-messaging android-pendingintent


【解决方案1】:

我发现了错误并以自己的方式解决了它:-

像这样更改 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();

                    } 


                }


        }

快乐编码:))

【讨论】:

    【解决方案2】:

    这里的这些代码行正在立即启动一个新活动,因为它们在侦听器或其他条件之外。

    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);
    

    这些行应该足以让您的通知在单击时启动意图。

    供参考:the developer guide for notifications

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多