一部のアプリケーションでAndroidデバイスに通知を表示しています。通知が発行されるたびに、バンドルは値を保存し、通知をクリックすると、バンドル内のIDで新しいアクティビティが開きます。
ここで、1つの通知が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);
}
ありがとう