2017-03-18 111 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