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

时间:2016-09-08 05:26:27

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

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

这是我的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()方法,它在MainActivity中覆盖我打开片段: -

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

    }

我的问题是我想在点击推送通知消息时打开这个片段,但在我的情况下,片段在推送通知消息到达时打开。

2 个答案:

答案 0 :(得分:2)

我找到了错误,并以自己的方式解决了这个问题: -

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

                    } 


                }


        }

快乐编码:))

答案 1 :(得分:0)

这里的这些代码行正在立即开始一项新活动,因为它们不属于听众或其他条件。

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