我正在使用GCM,这是我的onMessage函数:
@Override
protected void onMessage(Context context, Intent intent) {
if (intent != null && intent.getExtras() != null) {
try {
String message = intent.getExtras().getString("message");
String userId = intent.getExtras().getString("user_id");
Log.i("","postda user id is:" + userId);
Log.i("","will enter here FRIENDS: ");
generateNotification(context, message, userId);
} catch (Exception e) {
Utils.appendLog("onMessage errror : " + e.getMessage());
Log.i(TAG, e.getMessage(), e);
}
}
}
这是我的CreateNotification功能:
private static void generateNotification(Context context, String message, String userID) {
Log.i("", "postda user message " + message + ".... userid: " + userID);
String title = context.getString(R.string.passenger_name);
Intent notificationIntent = new Intent(context, PSProfileActivity.class);
notificationIntent.putExtra("id", userID);
Log.i("", "postda ---------- userid: "+ userID);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
Log.i("", "postda message: " + message + "....userID " + userID );
PSLocationCenter.getInstance().pref.setDataChanged(context, true);
PSLocationCenter.getInstance().pref.setDataChangedProfile(context, true);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setContentTitle(title).setContentText(message).setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentIntent(intent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notification);
playTone(context);
}
这是PSProfileActivity onCreate函数:
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
ButterKnife.inject(this);
mHeader = new ProfileHeader(this, backFromHeader);
mData = new ProfileData(this);
mButtons = new ProfileViewPagerButtons(PSProfileActivity.this, firstPage);
Bundle bundle = getIntent().getExtras();
if(bundle != null) id = bundle.getString("id");
Log.i("", "postda in profile id is:" + id);
if(!id.contentEquals(String.valueOf(PSLocationCenter.getInstance().pref.getUserId(PSProfileActivity.this)))){
findViewById(R.id.action_settings).setVisibility(View.INVISIBLE);
}
Log.i("", "postda in profile id is 2:" + id);
}
这是我的Logcat响应:
04-17 15:33:53.650 9699-11695/nl.hgrams.passenger I/﹕ postda user id is:23
04-17 15:33:53.651 9699-11695/nl.hgrams.passenger I/﹕ postda user message alin reddd accepted your friend request..... userid: 23
04-17 15:33:53.651 9699-11695/nl.hgrams.passenger I/﹕ postda ---------- userid: 23
04-17 15:33:53.652 9699-11695/nl.hgrams.passenger I/﹕ postda message: alin reddd accepted your friend request.....userID 23
04-17 15:33:58.812 9699-9699/nl.hgrams.passenger I/﹕ postda in profile id is:28
04-17 15:33:58.814 9699-9699/nl.hgrams.passenger I/﹕ postda in profile id is 2:28
正如你所看到的,我通过bundle发送了一个ID,但是我在另一个页面上获得的ID是一个完全不同的id(它实际上是应该在这里得到的最后一个ID)。这真的很奇怪,有谁知道为什么会这样?
答案 0 :(得分:2)
在PendingIntent
:
int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent.getActivity(context, iUniqueId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
答案 1 :(得分:1)
您始终使用相同的ID生成意图。您需要将唯一标识符作为第二个参数传递,并且还需要添加Flag FLAG_UPDATE_CURRENT,以便更新附加内容并始终获取您传递的最新附加内容。
所以你必须产生这样的意图:
PendingIntent intent = PendingIntent.getActivity(context, identifier , notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT );
标识符可以是任何唯一的,如自动增量变量或当前时间戳
答案 2 :(得分:0)
问题可能是您只使用额外内容来修改PendingIntent。请尝试将id嵌入notificationIntent的数据字段中。
来自http://developer.android.com/reference/android/app/PendingIntent.html
人们常犯的一个错误就是使用Intents创建多个PendingIntent对象,这些对象只在“额外”内容中有所不同,期望每次都获得不同的PendingIntent。这不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果你使用两个与Intent.filterEquals相同的Intent对象,那么你将获得两个相同的PendingIntent。
答案 3 :(得分:0)
我认为你必须使用这个标志,FLAG_UPDATE_CURRENT。
像这样: PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
这将使用您通过bundle传递的新附加内容刷新旧的意图并获取与ID匹配的正确数据。