2017-03-18 110 views
1

我正在尝试通知回复,比如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

+0

凡定义 “消息” 和 “回复” 按钮? – Cochi

+0

没有消息按钮,只回复和内容消息 –

+0

看看我的文章可以帮助你 – Cochi

回答

0

尝试添加

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

其他信息here

+0

不过当我点击图标和邮件内容 –

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) 

希望这会有所帮助。

对不起,我的英语。

+0

我试过了,但它仍然打开通知活动仿佛MainActivity不通知活动开幕存在。 –

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

的变化是我已经使用了两种不同PendingIntentsetContentIntent(pIntent)addAction(R.drawable.ic_launcher,"Reply",mPIentent)

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