根据通知操作点击

时间:2017-03-18 07:44:54

标签: java android android-notifications

我正在尝试像whatsapp一样制作通知回复。

这是我的代码

public void sendNotification(String msg, Intent i, ContactModel contact)
    {
        i.putExtra("message", msg);
        i.putExtra("contact", new Gson().toJson(contact));
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

        String replyLabel = "Reply";
        RemoteInput remoteInput = new RemoteInput.Builder("KEY_REPLY")
                .setLabel(replyLabel)
                .build();

        PendingIntent contentIntent = PendingIntent.getActivity(context, 100, i,
                PendingIntent.FLAG_UPDATE_CURRENT);

        Bundle bundle = new Bundle();
        bundle.putBoolean("reply", true);
        NotificationCompat.Action replyAction = new NotificationCompat.Action.Builder(
                R.drawable.ic_phone, replyLabel, contentIntent)
                .addRemoteInput(remoteInput)
                .addExtras(bundle)
                .setAllowGeneratedReplies(true)
                .build();

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher))
                        .setContentTitle(contact.getName())
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .setStyle(new NotificationCompat.BigTextStyle()
                                .bigText("Content Hidden"))
                        .setContentText(msg)
                        .addAction(replyAction)
                ;

        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.cancel(Constants.PUSH_ID);
        mNotificationManager.notify(Constants.PUSH_ID, mBuilder.build());
    }

现在我的通知显示"消息"和"回复"按钮。

我面临的问题是,我无法区分用户选择“回复”按钮或尝试打开通知。

我的主要目的是

Intent myIntent = new Intent(this, NotificationActivity.class);

我想要的是, 当用户点击"回复"按钮打开

Intent myIntent = new Intent(this, NotificationActivity.class);

当用户点击通知本身时,它会打开

Intent myIntent = new Intent(this, MainActivity.class);

即使不可能,我怎样才能确定执行了哪些操作。

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试添加

setContentIntent(new Intent(this, MainActivity.class))

其他信息here

答案 1 :(得分:0)

您应该为每个案例创建一个待处理的意图,一个用于回复按钮,另一个用于您的消息通知。

addAction()为您的通知定义操作按钮,setContentIntent(pendingIntent)为您的核心消息执行相同操作。

.... your code

    Intent messageIntent = new Intent(this, MainActivity.class);

    PendingIntent messagePendingIntent = PendingIntent.getActivity(context, 200, messageIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(context)
                            .setSmallIcon(R.drawable.ic_launcher)
                            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher))
                            .setContentTitle(contact.getName())
                            .setDefaults(Notification.DEFAULT_SOUND)
                            .setStyle(new NotificationCompat.BigTextStyle()
                                    .bigText("Content Hidden"))
                            .setContentText(msg)
                            .setContentIntent(messagePendingIntent)   // some change here
                            .addAction(replyAction)

希望这有帮助。

抱歉我的英文。

答案 2 :(得分:0)

我从你的陈述中理解的是:你对两种不同的行为有两种不同的意图,所以我不确定它会解决你的问题,但这就是我的尝试。

public void createNotification() {
    Intent intent = new Intent(this, NotificatioTest.class);
    PendingIntent pIntent = PendingIntent.getActivity(this,(int) System.currentTimeMillis(), intent, 0);
    Intent mIntent = new Intent(this, MainActivity.class);
    PendingIntent mPIntent = PendingIntent.getActivity(this,(int)System.currentTimeMillis(),mIntent,0);
    Notification noti = new Notification.Builder(this)
            .setContentTitle("Your Title")
            .setContentText("Your text content")
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pIntent)
            .addAction(R.drawable.ic_launcher, "Reply", mPIntent).build();
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    noti.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(0, noti);
}

更改是我使用了两个不同的PendingIntent作为setContentIntent(pIntent)addAction(R.drawable.ic_launcher,"Reply",mPIentent)

输出: https://youtu.be/vVKVMboHEOA