Reputation: 8362
I am showing notifications on a android device in some of my application. Each time notification is fired, a bundle saves the value and then on the click of the notification a new activity opens with the id in the bundle.
Now here I am in a problem that when one notification comes with id :A and simultaneously if the user gets the notification with id : B. Now it will cause the bundle value to - B. Now If any of the notification is clicked, then the page will be opened with the new notification value. This is the main problem that the id gets updated.
I require that on notification click right page should always open
sending notification
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 where bundle is checked
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);
}
Thanks
Upvotes: 0
Views: 1526
Reputation: 3757
It appears that the latest one is always what would be opened, is this not what you wanted?
Would you rather there be 2 separate notifications in the case you described? One for :A and one for :B ?
Upvotes: 0
Reputation: 12717
i have find the solution,
Download this library and add your project,
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);
}
}
Then on the 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);
}
}
Upvotes: 1