Comportamiento confuso al iniciar una nueva actividad con PendingIntent

Estoy utilizando BroadCast Listener para escuchar estadísticas de teléfono entrantes luego empujar una notificación como esta:

CharSequence contentTitle = "Contact: " + number; CharSequence contentText = "Call From: " + number; Intent notificationIntent = new Intent(context, CallHandler.class); notificationIntent.putExtra(KEYS.NUMBER, number); notificationIntent.putExtra(KEYS.STATE, stat); notificationIntent.putExtra(KEYS.NAME, name); notificationIntent.putExtra(KEYS.DURATION, duration); notificationIntent.putExtra(KEYS.START_TIME, startTime); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notif.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notif.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify((int) System.currentTimeMillis(), notif); 

Así que cuando hay varias llamadas, espero tener notificación de llamada múltiple y cuando hago clic en cada notificación, espero iniciar una actividad con los parámetros adjuntos. Sin embargo, puedo ver que las actividades que comienza más tarde, obtiene la intención de la llamada anterior.

Aquí es cómo estoy buscando en la intención de la actividad

  Bundle extras = getIntent().getExtras(); String number = extras.getString(KEYS.NUMBER); // String state = extras.getString(KEYS.STATE); long duration = extras.getLong(KEYS.DURATION); Date start = getStartDate(); ((TextView) findViewById(R.id.subject)).setText(""); ((TextView) findViewById(R.id.start_time)).setText(tf.format(start)); ((TextView) findViewById(R.id.end_time)).setText(tf .format(getEndDate())); ((TextView) findViewById(R.id.caller_number)).setText(number); ((TextView) findViewById(R.id.notes)).setText(getNotesDefaultContent( number, duration, start)); 

¿Cómo puedo mantener los intentos de llamar independientemente actividad independiente?

Prueba esto:

 PendingIntent.getActivity(context, 0 , notificationIntent, PendintIntent.FLAG_UPDATE_CURRENT); 

Observe el último parámetro del método PendingIntent.getActitity. Si desea saber qué BANDERA debe utilizar, consulte los documentos de la API – [http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context, int, android .content.Intent, int)] [1]

[1]: http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context , int, android.content.Intent, int)

~ Dolph ~

Se puede lograr aún más fácilmente … simplemente overide onNewIntent(Intent intent) método en la clase de actividad y acaba de agregar startactivity(intent) dentro de él.

Ok, creo que he encontrado una solución. El truco es crear el Propósito correctamente!

Aquí está mi código de trabajo:

  CharSequence contentTitle = "Contact: " + number; CharSequence contentText = "Call From: " + number; Intent notificationIntent = new Intent(context, CallHandler.class); notificationIntent.setAction("com.vantage.vcrm.android.telephony"+System.currentTimeMillis());//unique per contact notificationIntent.putExtra(KEYS.NUMBER, number); notificationIntent.putExtra(KEYS.STATE, stat); notificationIntent.putExtra(KEYS.NAME, name); notificationIntent.putExtra(KEYS.DURATION, duration); notificationIntent.putExtra(KEYS.START_TIME, startTime); PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, 0); notif.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notif.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify((int) System.currentTimeMillis(), notif); 

Usted ve, estoy fijando la acción única en mi intento haciendo esto:

 notificationIntent.setAction("com.vantage.vcrm.android.telephony"+System.currentTimeMillis());//unique per contact 

También estoy enviando la identificación única del solicitante en el intento pendiente:

 PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, 0); 

Esto resolvió el problema.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.