¿Por qué se usan PendingIntents en Android?

Hasta donde yo sé, un PendingIntent es un token que le da a una aplicación extranjera (por ejemplo, NotificationManager, AlarmManager, Home Screen AppWidgetManager u otras aplicaciones de terceros), que permite que la aplicación extranjera use los permisos de su aplicación para ejecutar una pieza predefinida de código.

  • Aquí hay una explicación detallada de la pendiente pendiente

Una descripción de una intención y una acción objetivo para realizar con ella. Las instancias de esta clase se crean con getActivity (Context, int, Intent, int), getActivities (Context, int, Intent [], int), getBroadcast (Context, int, Intent, int) y getService (Context, int, Intent , En t); el objeto devuelto se puede entregar a otras aplicaciones para que puedan realizar la acción que describió en su nombre más adelante.

Al dar un PendingIntent a otra aplicación, le está otorgando el derecho de realizar la operación que ha especificado como si la otra aplicación fuera usted mismo (con los mismos permisos e identidad). Como tal, debe tener cuidado con la forma en que construye el PendingIntent: casi siempre, por ejemplo, el Intento base que proporciona debe tener el nombre del componente establecido explícitamente en uno de sus propios componentes, para asegurarse de que finalmente se envíe allí y en ningún otro lugar.

Un PendingIntent en sí mismo es simplemente una referencia a un token mantenido por el sistema que describe los datos originales utilizados para recuperarlo. Esto significa que, incluso si el proceso de su aplicación propietaria se anula, el PendingIntent mismo seguirá siendo utilizable desde otros procesos que se le hayan dado. Si la aplicación creadora luego recupera el mismo tipo de PendingIntent (misma operación, misma acción de Intent, datos, categorías y componentes, y los mismos indicadores), recibirá un PendingIntent que representa el mismo token si aún es válido, y puede entonces llame a cancel () para eliminarlo.

Debido a este comportamiento, es importante saber cuándo dos Intentos se consideran iguales para recuperar un PendingIntent. Un error común que cometen las personas es crear múltiples objetos PendingIntent con Intents que solo varían en su contenido “extra”, esperando obtener un PendingIntent diferente cada vez. Esto no pasa. Las partes de la intención que se utilizan para la coincidencia son las mismas definidas por Intent.filterEquals. Si usa dos objetos Intent que son equivalentes según Intent.filterEquals, obtendrá el mismo PendingIntent para ambos.

Hay dos formas típicas de lidiar con esto.

Si realmente necesita varios objetos PendingIntent distintos activos al mismo tiempo (como usar como dos notificaciones que se muestran al mismo tiempo), deberá asegurarse de que haya algo diferente en ellos para asociarlos con diferentes Pendiente Intentos. Estos pueden ser cualquiera de los atributos de Intent considerados por Intent.filterEquals, o diferentes enteros de códigos de solicitud suministrados a getActivity (Context, int, Intent, int), getActivities (Context, int, Intent [], int), getBroadcast (Context, int , Intent, int) o getService (Context, int, Intent, int).

Si solo necesita un PendingIntent activo a la vez para cualquiera de los Intents que usará, entonces puede usar alternativamente las banderas FLAG_CANCEL_CURRENT o FLAG_UPDATE_CURRENT para cancelar o modificar cualquier PendingIntent actual asociado con el Intent que está suministrando.

Espero que sepas el uso básico de Intents,

no es más que usado para realizar la navegación de una pantalla a otra con o sin datos (también hay otros usos, pero lo anterior es principalmente), la intención normal se ejecuta en el momento en que llama a startActivity. Pero

Las intenciones pendientes necesitan interacción manual para ejecutarse como se usa en la captura de pantalla que adjuntaste. Allí, la navegación o acción a realizar se establece con intención pendiente, pero no se ejecuta de inmediato.

Debe hacer clic en la notificación para que se active ese intento, para que se active esa acción.

Espero que esto te haya ayudado a comprender el uso de la intención pendiente en el código de la captura de pantalla compartida.

Especifica una acción para tomar en el futuro. Le permite pasar una intención futura a otra aplicación y permitir que esa aplicación ejecute esa intención como si tuviera el mismo permiso que su aplicación.

Y con respecto al código, intente usar el contexto de main_activity en lugar de usar esto.

Utilizará Intent cuando invoque el fragmento de código dentro de su aplicación, mientras que PendingIntent es un token de acceso para su aplicación dado a las fuentes externas como AlarmManager o NotificationManager.