android - 如何在点击推送通知消息时打开特定 fragment ?

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

我想在点击推送通知消息时打开特定 fragment 。在我的例子中,当通知发生时 fragment 是打开的。但我想在点击通知消息而不是到达消息时打开 fragment 。

这是我的 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());
    } 

这是我的 onNewIntent() 方法,它在我打开 fragment 的 MainActivity 中覆盖:-

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

    }

我的问题是我想在点击推送通知消息时打开这个 fragment ,但在我的例子中,当推送通知消息到达时 fragment 是打开的。

最佳答案

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

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

                    } 


                }


        }

快乐编码:))

关于android - 如何在点击推送通知消息时打开特定 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383157/

相关文章:

java - Android Studio 默认值/传递变量

Android 蓝牙 .connect() 异常 Nexus 7 OBDII 适配器

android - 绑定(bind)到服务(如果存在)

android - 从推送通知打开安卓应用

ios - 为什么推送通知在 testflight 上不起作用?

android - React Native - 无法在 Android 的前台访问 Firebase 推送通知

java - 在 java 和 JSON 中编码希伯来语

android - 如何在 Retrofit 2 中使用 gson TypeAdapter?

android intent action_send 选项只发送一次

java - 一项 Activity 中基于所选 ListView 项的多个上下文菜单