segundo - Android: cómo distinguir CLEAR todos los eventos de la barra de notificaciones de la acción del usuario
notificaciones en segundo plano android studio (3)
Lo que describes es un comportamiento muy obtuso. Solo necesita configurar el intento pendiente de su notificación y, cuando se haga clic en él, se ejecutará la intención que lo respalda.
Si su código está navegando al usuario de regreso a la aplicación cuando se borra la notificación, entonces ya tiene un problema con su diseño. Si el usuario borra su notificación, NO debería intentar navegar hacia atrás. Por lo tanto, setDeleteIntent()
NO se debe asociar con el inicio de ninguna actividad.
Tenga en cuenta que la intención respaldada al hacer clic en la notificación (setContentIntent())
y borrar (setDeleteIntent())
la notificación son básicamente dos PendingIntents, no deben ser lo mismo, que es lo que su problema está describiendo.
De acuerdo con la especificación , .setDeleteIntent(pendingIntent)
está asociado a ambas acciones (CLEAR todos los eventos de la barra de notificaciones y la acción del usuario, como deslizar).
Mis requisitos son que cuando el usuario toque la notificación que aparece en la barra de notificaciones, debe ser reenviado a la NotificationsList.class
. Esto se hace con mi pendingInent:
PendingIntent sendPendingIntent = PendingIntent.getActivity(context, reminderId, new Intent(context, NotificationsList.class), PendingIntent.FLAG_UPDATE_CURRENT);
Sin embargo, al hacer clic en el botón BORRAR, el usuario no debe navegar a la aplicación en absoluto. Con .setDeleteIntent(pendingIndent)
no puedo cumplir el segundo requisito. El usuario todavía está navegando a NotificationsList.class.
¿Existe alguna manera de distinguir mediante programación de los eventos de notificaciones CLEAR
todo el botón de BORRAR de las acciones del usuario como tocar o deslizar sobre la notificación específica en la barra de notificaciones?
De acuerdo con las pautas de diseño , el usuario puede esperar interactuar con su notificación mediante gestos de mayor nivel, como hacer clic, deslizar y pellizcar. Responder instantáneamente a un evento de nivel inferior como el toque cortocircuitaría estos gestos, por lo que sus requisitos violarían las pautas de diseño y no debería implementarlo.
Si se modifican los requisitos para que el usuario se desplace cuando hacen clic en la notificación, no hay necesidad de distinguir entre deslizar y borrar, lo que en cualquier caso es imposible.
Por lo tanto, su problema debe resolverse cambiando una palabra en los requisitos: toque -> haga clic.
No puedes distinguir los dos eventos. Como dice la documentación :
Las notificaciones permanecen visibles hasta que ocurre una de las siguientes situaciones:
- El usuario descarta la notificación individualmente o mediante el uso de "Borrar todo" (si se puede borrar la notificación).
- El usuario hace clic en la notificación y usted llamó a setAutoCancel () cuando creó la notificación.
- Llama a
cancel()
para obtener una ID de notificación específica. Este método también elimina las notificaciones en curso.- Llama a
cancelAll()
, que elimina todas las notificaciones que emitió anteriormente.
Entonces, básicamente, hay tres eventos diferentes en la vista de un programador:
- Descartas la notificación
- El usuario hace clic en la notificación
- El usuario descarta la notificación (deslizando o borrando)
El primer evento se cancelAll()
solo llamando a cancelAll()
o cancel()
.
Puedes manejar el segundo como (lo que quieres hacer, creo):
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//....
.setContentIntent(sendPendingIntent);
Y puede manejar el tercer evento como (como ha descrito anteriormente):
builder.setDeleteIntent(pendingIndent)
No recomiendo iniciar una actividad después de que el usuario rechace su notificación, porque el usuario no la esperará y será una mala experiencia para el usuario.
Espero poder ayudar.