2012-11-27 111 views
0

我在某些應用程序的Android設備上顯示通知。每次觸發通知時,捆綁包都會保存該值,然後點擊通知時,會打開一個新的活動,並顯示捆綁包中的ID。單擊Android通知

現在我遇到了一個問題,即當一個通知帶有id:A,同時如果用戶使用id獲得通知:B.現在它將導致包值爲-B.現在,如果任何通知被點擊,那麼頁面將以新的通知值打開。這是id更新的主要問題。

我需要在通知單擊右側頁面應始終打開

發送通知

connection.addPacketListener(new PacketListener() { 

      @Override 
      public void processPacket(Packet packet) { 
       // TODO Auto-generated method stub 
       Message message = (Message) packet; 
       senderName = packet.getFrom(); 

       // new code 
       mMessageItem = new MessageItemDataClass(); 
       mMessageItem.isSendMessage = false; 
       mMessageItem.messageText = message.getBody(); 

       int alphaPOS = senderName.indexOf("@"); 
       String subSenderName = senderName.substring(0, alphaPOS); 



       refinedID = refineFromjId(packet.getFrom()); 

       Random rand = new Random(); 
       int randNotificationVal = rand.nextInt(1000); 
       String notificationID = ""+randNotificationVal; 

       while(idMap.containsValue(notificationID)){ 

        randNotificationVal = rand.nextInt(1000); 
        notificationID = ""+randNotificationVal; 

       } 


       if(!idMap.containsKey(refinedID)){ 

        saveNotificationID(refinedID, notificationID); 
       } 

       if (UserChatActivity.checkPresence == true) { 

        if (packet.getFrom().equalsIgnoreCase(
          refineFromjId(UserChatActivity.frienduserID) 
            + "/Smack")) { 

         UserChatActivity.messages.add(mMessageItem); 
        } else { 
         notificationforChat(
           subSenderName + ": " + message.getBody(), 
           packet.getFrom().toString(), Integer.parseInt(idMap.get(refinedID)) 
); 
        } 
       } else { 
        notificationforChat(
          subSenderName + ": " + message.getBody(), packet 
            .getFrom().toString(), Integer.parseInt(idMap.get(refinedID)) 
); 

      } 



public void notificationforChat(CharSequence message, String toJid, 
      int notificationID) { 

     int notificationCount = 1; 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
     int icon = R.drawable.ic_launcher; 
     CharSequence tickerText = message; 
     long when = System.currentTimeMillis(); 
     Notification notification = new Notification(icon, tickerText, when); 
     //notification.number = notificationCount++; 
     Context context = getApplicationContext(); 

     CharSequence contentTitle = "Chat"; 
     CharSequence contentText = message; 
     Intent notificationIntentforChat = new Intent(this, 
       UserChatActivity.class); 
     notificationIntentforChat.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
       | Intent.FLAG_ACTIVITY_NEW_TASK); 

     notificationIntentforChat.putExtra("userNameVal", toJid); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
       notificationIntentforChat, PendingIntent.FLAG_UPDATE_CURRENT); 
     notification.setLatestEventInfo(context, contentTitle, contentText, 
       contentIntent); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 
     notification.defaults = Notification.DEFAULT_ALL; 
     mNotificationManager.notify(notificationID, notification); 
    } 

UserChatActivity其中包檢查

try { 
      Bundle bundle = getIntent().getExtras(); 
      if (bundle.getString("userNameVal") != null) { 
       frienduserID = bundle.getString("userNameVal");   
       int index_of_Alpha = frienduserID.indexOf("@"); 
       String subID = frienduserID.substring(0, index_of_Alpha); 
       mtvChatTitle.setText(subID); 
       //System.out.println("TRY == "+frienduserID); 
      } 
     } catch (Exception e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      //System.out.println(""+frienduserID); 
     } 

感謝

回答

1

我已經找到解決方案,

下載這個庫,並添加您的項目,

https://github.com/JakeWharton/NotificationCompat2/downloads

import android.app.Activity; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

import com.example.notification.R.id; 
import com.jakewharton.notificationcompat2.NotificationCompat2; 

public class MainActivity extends Activity { 
    Button btn; 
    int i = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn = (Button) findViewById(id.button1); 

     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // Click button 3-4 times and there will be natification and 
       // click one of them 

       notificationforChat("Message" + i,"sender" + i,i); 
       //notificationforChat("sender" + i, "Message" + i, i); 
       i++; 
      } 
     }); 

    } 

    public void notificationforChat(String message, String sender,int notificationID) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("key", message); 

     NotificationManager notifManager = (NotificationManager) this 
       .getSystemService(this.NOTIFICATION_SERVICE); 
     int uniqueInteger = notificationID;// create a unique Integer 
     int icon = R.drawable.ic_launcher; 

     NotificationCompat2.Builder mNotification = new NotificationCompat2.Builder(
       this).setSmallIcon(icon).setContentTitle(sender) 
       .setContentIntent(getPendingIntent(bundle, uniqueInteger)); 

     mNotification.setDefaults(Notification.DEFAULT_LIGHTS 
       | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); 
     mNotification.setAutoCancel(true); 
     notifManager.notify(uniqueInteger, mNotification.build()); 
    } 

    private PendingIntent getPendingIntent(Bundle bundle, int rc) { 
     Intent notificationIntent = new Intent(MainActivity.this, UserChatActivity.class); 
     notificationIntent.putExtras(bundle); 
     return PendingIntent.getActivity(this, rc, notificationIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
    } 
} 

然後在userChatActivity,

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class UserChatActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     Intent intent = getIntent();   
     String key = intent.getStringExtra("key");  

     Log.v("notifica",key); 

    } 

} 
+0

感謝您的回覆。但是,如何獲取通知點擊通知的ID。 ??它如何識別ArrayList中的id? –

+0

創建一個類來保存數據,我編輯我的答案 – Talha

+0

它將如何得到哪個通知被點擊??? i。假設有兩個通知。一個來自用戶A,另一個來自用戶B.如何獲得點擊哪一個? –

0

看來,最近的一次是總是什麼將被打開,這是不是你想要的?

你願意在你描述的情況下有2個單獨的通知嗎?一個用於:A和一個用於:B?