1

Я работаю с 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 

Как вы можете видеть, я отправляю через комплект идентификатор, но тот, который я получаю на другой странице, - это совершенно другой идентификатор (на самом деле это последний идентификатор, который нужно было получить здесь) , Это действительно странно, кто-нибудь знает, почему это происходит?

ответ

2

Используйте уникальный identitier в PendingIntent:

int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);  
PendingIntent.getActivity(context, iUniqueId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

попытался это так, но я все еще получаю один и тот же вопрос, даже если У меня есть уникальный ID –

+0

Можете ли вы попробовать этот? http://stackoverflow.com/a/29207788/1347366 –

+1

Это действительно работало, спасибо –

0

Проблема может заключаться в том, что вы используете только дополнительные функции для изменения PendingIntent. Попробуйте вставить идентификатор в поле данных notificationIntent.

От http://developer.android.com/reference/android/app/PendingIntent.html

Частая ошибка люди делают это, чтобы создать несколько объектов PendingIntent с намерениях, которые изменяются только в их «лишние» содержание, ожидая, чтобы получить другой PendingIntent каждый раз. Этого не происходит. Части намерения, которые используются для сопоставления, являются теми же, что определены Intent.filterEquals. Если вы используете два объекта Intent, которые эквивалентны Intent.filterEquals, вы получите тот же PendingIntent для обоих из них.

0

Я думаю, вы должны использовать этот флаг, FLAG_UPDATE_CURRENT.

НЕТ: PendingIntent.getActivity (контекст, 0, намерение, PendingIntent.FLAG_UPDATE_CURRENT);

Это обновит старые намерения новыми дополнениями, которые вы передаете через комплект, и получите правильные данные, соответствующие ID.

1

Вы генерируете намерение с тем же идентификатором всегда. Вам нужно передать уникальный идентификатор в качестве второго параметра, а также добавить Flag FLAG_UPDATE_CURRENT, чтобы дополнения были обновлены, и вы всегда получаете последние дополнения, которые вы передали.

Таким образом, вы должны генерировать намерение так:

PendingIntent intent = PendingIntent.getActivity(context, identifier , notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

идентификатор может быть что-нибудь уникальное, как переменной автоматического приращения или текущего времени

 Смежные вопросы

  • Нет связанных вопросов^_^