android - open - pendingintent notification example
Notificación de Android pendienteInternos extras null (4)
Acabo de recibir la respuesta, agregue la línea: resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
AVISO: si lo agrega como resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
No funcionará
También probé otras banderas como, "FLAG_ACTIVITY_NEW_TASK" y "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED". ninguno de los dos funciona aquí.
Intento enviar información desde la notificación a la actividad invocada, mientras que de mi actividad obtuve nulo.
El código para la notificación es:
private void showNotification() {
Intent resultIntent = new Intent(this, MainActivity.class);
if (D)
Log.d(TAG, "Id: " + Id);
resultIntent.putExtra("ineedid", deviceId);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MeterActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT);
// Bundle tmp = resultIntent.getExtras();
// if (tmp == null) {
// Log.d(TAG, "tmp bundle is null");
// } else {
// long id = tmp.getLong("ineedid", -1);
// Log.d(TAG, "tmp id : " + id);
// }
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
BLEMessengerService.this)
.setSmallIcon(R.drawable.ic_action_search)
.setContentTitle("Event tracker")
.setContentText("Events received").setOngoing(true)
.setContentIntent(resultPendingIntent)
.setWhen(System.currentTimeMillis());
int mId = R.string.service_notification_start_service;
mNM.notify(mId, mBuilder.getNotification());
}
Código para obtener información del intento en la actividad principal;
Bundle extras = getIntent().getExtras();
if (extras != null) {
long deviceID = getIntent().getLongExtra("ineedid",
-1);
if (ID == -1) {
if (D)
Log.i(TAG_D, "Wrong Id received.");
finish();
} else {
device = dataSource.getDeviceByID(deviceID);
if (D)
Log.i(TAG_D, "Get the id.");
}
} else {
if (D)
Log.d(TAG_D, "Bundle is null");
finish();
}
He verificado antes de que se notifique la notificación, el paquete no es nulo y tiene una identificación en los extras. Mientras que, cuando traté de buscarlo por intención, desapareció. Ayuda.
Estaba trabajando en un complemento de notificaciones locales para Unity cuando encontré el mismo problema -> Lancé la aplicación, programé la notificación local, envié la aplicación al fondo, apareció una notificación local y, cuando hice clic en ella, la aplicación se reanudó y getIntent().getExtras()
era null
.
En mi caso, el problema fue que estaba tratando de obtener los extras en el intento equivocado. Intenta imprimir los intentos con un simple toString, en el momento de la creación y cuando lo obtienes, para asegurarte de que lo recibido es lo que esperas.
También eche un vistazo al método onNewIntent .
Para mí, además de configurar Intent.FLAG_ACTIVITY_SINGLE_TOP, tuve que agregar una acción única para la intención:
Intent resultIntent = new Intent(caller, NotificationActivity.class);
String xId = getNextUniqueId();
resultIntent.putExtra("x_id", xId);
resultIntent.setAction(xId);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
.. sin setAction (..), Extras es nulo en la intención recibida por mi NotificationActivity.
Esta publicación ayuda a explicarlo: https://.com/a/3128271/2162226
en PendingIntent use esta bandera PendingIntent.FLAG_UPDATE_CURRENT
me funciona
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);