Pregunta

Soy un novato en Android.Leí la documentación de Android pero todavía necesito más aclaraciones.¿Alguien puede decirme qué es exactamente un PendingIntent ¿es?

¿Fue útil?

Solución

A PendingIntent es una señal de que usted le da a una aplicación externa (por ejemplo NotificationManager, AlarmManager, la pantalla de inicio AppWidgetManager, u otras aplicaciones de tercera parte), que permite la solicitud extranjera a utilizar los permisos de la aplicación para ejecutar una parte predefinida del código .

Si le das a la solicitud extranjera un Intento, ejecutará su Intent con sus propios permisos. Pero si se le da la solicitud extranjera un PendingIntent, que la aplicación se ejecutará su Intent utilizando el permiso de su aplicación.

Otros consejos

INTENCIÓN

Los intents son el mecanismo de mensajería estándar en Android que expresa la intención del usuario de realizar algún trabajo.Le permiten interactuar con otros componentes definidos por usted o por el sistema operativo Android.

Ejemplo:

  1. Transmitir un mensaje
  2. Iniciar la cámara
  3. iniciar un servicio
  4. Lanzar una actividad
  5. Mostrar una página web o una lista de contactos
  6. Marcar un número de teléfono o contestar una llamada telefónica

    Se utilizan de ambas maneras.

1) por usted para llamar a un componente

2)por el sistema para notificarle de algún evento.

El flujo de trabajo lógico para crear una intención suele ser el siguiente:

  • Crear la intención
  • b.Agregar opciones de intención-> Ex.qué tipo de intención estamos enviando al sistema operativo o cualquier atributo asociado con esa intención, como una cadena de texto o algo que se pasa junto con la intención
  • C.EJECUTAR la intención

Ejemplo de la vida real:Digamos que me despierto por la mañana y "PRETENDER"Para ir al baño.Primero tendré que PENSAR en ir al baño, pero eso realmente NO me lleva al baño.Entonces tendré que decirle a mi cerebro que se levante de la cama primero, luego camine hasta el baño, luego suelte, luego vaya y me lave las manos, luego vaya y me limpie las manos.Una vez que sé a dónde voy, ENVÍO la orden de comenzar y mi cuerpo entra en acción.

INTENCIÓN PENDIENTE

A PendingIntent especifica una acción a tomar en el futuro.Le permite pasar un Intent futuro a otra aplicación y permitir que esa aplicación ejecute ese Intent como si tuviera el same permissions as your application, independientemente de si su aplicación todavía existe o no cuando finalmente se invoca el Intent.Es un token que usted le da a una aplicación externa que le permite usar los permisos de su aplicación para ejecutar un fragmento de código predefinido.

Al dar un PendingIntent a otra aplicación, le estás otorgando el derecho de realizar la operación que has especificado como si la otra aplicación fuera tú mismo (con los mismos permisos e identidad).Como tal, debes tener cuidado con la forma en que construyes el PendingIntent:A menudo, por ejemplo, el Intent base que proporcione tendrá el nombre del componente establecido explícitamente en uno de sus propios componentes, para garantizar que finalmente se envíe allí y a ningún otro lugar.

Es una acción de intención que desea realizar pero en un momento posterior.Piense en ello como congelar un intento.La razón por la que es necesario es porque se debe crear y ejecutar un Intent desde un Context en su aplicación, pero hay ciertos casos en los que uno no está disponible en el momento en que desea ejecutar la acción porque técnicamente está fuera del contexto de la aplicación (los dos ejemplos comunes son iniciar una Actividad desde una Notificación o un BroadcastReceiver.Al crear un PendingIntent desea utilizar para iniciar, digamos, una actividad mientras tiene la Context hacerlo (desde dentro de otra Actividad o Servicio)

Continuando con el ejemplo de la vida real:digamos que quiero ducharme pero quiero ducharme DESPUÉS de cepillarme los dientes y desayunar.Entonces sé que no me ducharé durante al menos 30 a 40 minutos.Todavía tengo en la cabeza que necesito preparar mi ropa, luego subir las escaleras de regreso al baño, luego desvestirme y luego ducharme.Sin embargo, esto no sucederá hasta que hayan pasado 30-40 minutos.Ahora tengo una intención PENDIENTE de ducharme.Está PENDIENTE durante 30-40 minutos.

Esa es prácticamente la diferencia entre una intención pendiente y una intención regular.En breve:

Intención normal -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

Intención pendiente -> REQUIRES A REGULAR INTENT TO BE CREATED

Las intenciones son de dos tipos: Explícito y Implícito

Intención explícita:Cuando su aplicación sabe a qué componente llamar para realizar alguna acción

Intención implícita:Cuando su aplicación no sabe qué componente puede realizar exactamente la acción deseada.Por ejemplo, si simplemente dice que desea mostrar una URL, el sistema decide qué componente cumplirá la intención.

Para obtener una idea mejor y más clara sobre los intentos.Visite los enlaces a continuación

  1. Slidenerd.com
  2. Tutorial de intención de Android
  3. Algo mas

Una Pendiente Intención es una ficha que le das a alguna aplicación para realizar una acción en nombre de sus aplicaciones independientemente de si su proceso de aplicación está vivo o no.

Creo que la documentación está suficientemente detallado: espera de documentos Intención .

Basta pensar en los casos de uso para Pendiente Intentos similares (Difusión Propósitos, alarmas de programación) y la documentación será más clara y significativa.

En mi caso, ninguna de las respuestas anteriores ni documentación oficial de Google me ayudó a tomar la concepto de clase PendingIntent.

Y entonces me encontré con este video, Google I / O 2013, Más allá del punto azul sesión. En este video, ex googler Jaikumar Ganesh explica qué es PendingIntent, y eso fue lo que me dio el panorama general de esta.

A continuación es sólo la transcripción del video de arriba ( de 15:24 ).

  

¿Qué es una asignatura pendiente intención?
  Es un identificador, que el proceso de aplicación va a dar al proceso de ubicación, y el proceso de localización se utilizan para despertar a su aplicación cuando un evento de interés sucede . Así que esto significa, básicamente, que su aplicación en el fondo no tiene que estar siempre en funcionamiento. Cuando algo de interés que pase, vamos a despertar. Esto ahorra una gran cantidad de batería.

Esta explicación se vuelve más claro con este fragmento de código (que se incluye en la diapositiva de la sesión).

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}
Se requiere

¿Por qué PendingIntent? que estaba pensando como

  1. ¿Por qué la aplicación receptora en sí no puede crear la Intent o
  2. ¿Por qué no podemos utilizar un Intent simple para el mismo propósito.

E.g.Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Si envío bluetoothIntent a otra aplicación, que no tiene permiso android.permission.BLUETOOTH_ADMIN, que recibir la solicitud no puede habilitar Bluetooth con startActivity(bluetoothIntent).

La limitación se supera utilizando PendingIntent. Con PendingIntent la aplicación receptora, no necesita tener android.permission.BLUETOOTH_ADMIN para habilitar Bluetooth. Fuente .

A la espera de la intención es la intención que se iniciará en algún momento en el futuro. se inicia la intención normales inmediatamente cuando se pasa a startActivity(Intent) o StartService(Intent).

Un futuro intención de que otras aplicaciones pueden utilizar.
Y he aquí un ejemplo para la creación de una:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

analogía TAXI

Intención

Intentos se utilizan normalmente para el inicio de Servicios. Por ejemplo:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

Esto es como cuando se llama a un taxi:

Myself = CurrentClass
Taxi Driver = ServiceClass

A la espera de Intención

Usted tendrá que usar algo como esto:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

Ahora esta tercera parte se iniciará el servicio y actúe en su nombre. Una analogía de la vida real es Uber o Lyft que son ambas compañías de taxi.

Se envía una solicitud para un paseo a Uber / Lyft. A continuación, seguir adelante y llamar a uno de sus conductores en su nombre.

Por lo tanto:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

A PendingIntent es una señal de que usted da a otra aplicación (por ejemplo, Administrador de notificaciones, Alarm Manager u otras aplicaciones 3 ª parte), lo que permite a esta otra aplicación utilice los permisos de su aplicación para ejecutar una pieza de código predefinido. Para realizar una transmisión a través de una intención pendientes a fin de obtener una PendingIntent través PendingIntent.getBroadcast (). Para llevar a cabo una actividad a través de la intención a la espera de que reciba la actividad a través de PendingIntent.getActivity ().

¿Qué es un Intento?

Un intento es un comando específico en Android que le permite enviar un comando al sistema operativo Android para hacer algo específico. Piense en ello como una acción que debe llevarse a cabo. Hay muchas acciones que se pueden hacer como el envío de un correo electrónico, o adjuntar una foto a un correo electrónico o incluso el lanzamiento de una aplicación. El flujo de trabajo lógico de crear un intento es generalmente como sigue: a. Crear la Intención si. Añadir opciones de Calidad -> Ex. qué tipo de intenciones que estamos enviando al sistema operativo o cualquier atributos asociados con esa intención, como una cadena de texto o algo que se pasa junto con la intención do. RUN la Intención

ejemplo real: por ejemplo Vamos me despierto por la mañana y que "tiene la intención" para ir al baño. primero voy a tener que pensar en ir al baño, pero eso no quiere realmente me llegar al baño. entonces voy a tener que decirle a mi cerebro a salir de la cama en primer lugar, y luego caminar hasta el baño, y luego soltar, y después ir a lavarme las manos, y luego ir y limpie mis manos. Una vez que sé a dónde voy yo enviar el comando para comenzar y mi cuerpo pasa a la acción.

Lo que está pendiente Intentos?

Siguiendo con el ejemplo de la vida real, digamos que quiero tomar una ducha, pero quiero ducha después me lavo los dientes y tomar el desayuno. Así que sé que no voy a duchando hasta por lo menos 30-40 minutos. Todavía tengo en mi cabeza que necesito para preparar mi ropa, y luego subir las escaleras de nuevo al baño, y luego desnudarse y luego ducharse. Sin embargo, esto no sucederá hasta 30-40 minutos han pasado. Ahora tengo una intención pendiente para ducharse. Está pendiente durante 30-40 minutos.

Eso es más o menos la diferencia entre un Pendiente Intención Intención y una regular. Intentos regulares se pueden crear sin una pendiente intención, sin embargo, con el fin de crear una espera de Intención es necesario tener una configuración de Intención regular en primer lugar.

PendingIntent es básicamente un objeto que envuelve otro objeto Intent. A continuación, se puede pasar a una aplicación externa en la que está admitiendo que la aplicación del derecho a realizar la operación, es decir, ejecutar la intención, como si se hubiera ejecutado desde el proceso de su propia aplicación (mismo permiso e identidad). Por razones de seguridad siempre se debe pasar a las intenciones explícitas a un PendingIntent en lugar de ser implícita.

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

En un lenguaje sencillo, España  1. Una descripción de una acción intención y objetivo de realizar. En primer lugar hay que crear una intención y luego hay que pasar una clase específica de Java que desea ejecutar, a la Intención.
2. Usted puede llamar a los de la clase Java que es su clase de acción de clase por PendingIntent.getActivity, PendingIntent.getActivities (Contexto, int, Intención [], int), PendingIntent.getBroadcast (Contexto, int, Intención, int), y PendingIntent. getService (Contexto, int, Intención, int); Aquí vemos que la intención es la que proviene de la etapa 1 | 3. Debe tener en cuenta que ... Al dar un PendingIntent a otra aplicación, el usuario garantiza que el derecho a realizar la operación que ha especificado.

Eso es lo que he aprendido después de una larga lectura.

A PendingIntent envuelve la intención general con una ficha que le dan a aplicación externa para ejecutar con su permiso. Para, por ejemplo:

  

La notificación de su aplicación de música no se puede reproducir / pausar la música si   no dio la PendingIntent a enviar emisiones debido a que su aplicación de música   tiene permiso READ_EXTERNAL_STORAGE el que la aplicación de notificación   no lo hace. La notificación es un servicio del sistema (lo que es una aplicación externa).

Como su nombre sugiere .. PendingIntent

Puede Pend (hágalo después de algún tiempo) de ella. Que funcione como el otro ..es intención es una manera de dar a su tarea a alguna otra aplicación lleve a cabo en su nombre.

A la espera de Intención especifica una acción a tomar en el futuro. Se deja que pase un futuro Intención a otra aplicación y que la aplicación pueda ejecutar esa intención como si tuviera los mismos permisos que la aplicación, independientemente de si su aplicación es todavía alrededor cuando la intención es finalmente invocado.

Es una señal de que usted le da a una aplicación externa que permite la solicitud extranjera a utilizar los permisos de la aplicación para ejecutar una parte predefinida de código.

Si le das a la solicitud extranjera una intención, y que la aplicación envía / transmite la intención que diste, van a ejecutar la intención con sus propios permisos. Pero si en lugar de dar a la aplicación externa de una espera de Intención que creó usando su propio permiso, que la aplicación se ejecutará el contenido Intención mediante el permiso de su aplicación.

Para realizar una transmisión a través de una pendiente de intención a fin de obtener una PendingIntent través PendingIntent.getBroadcast (). Para llevar a cabo una actividad a través de la intención a la espera de que reciba la actividad a través de PendingIntent.getActivity ().

Es una acción Intención que desea realizar, pero en un momento posterior. Piense en ello un poner en hielo Intención. La razón se necesita se debe a una intención debe ser creado y lanzado desde un contexto válido en su aplicación, pero hay ciertos casos en los que uno no está disponible en el momento que desee ejecutar la acción, ya que son técnicamente fuera de contexto de la aplicación (el dos ejemplos comunes están poniendo en marcha una actividad de una notificación o una BroadcastReceiver.

Al crear un PendingIntent que desea utilizar para el lanzamiento, por ejemplo, una actividad mientras tiene el contexto para hacerlo (desde el interior de otra actividad o servicio) puede pasar ese objeto en torno a algo externo a fin de que a parte de lanzamiento de su solicitud en su nombre.

A PendingIntent proporciona un medio para aplicaciones de trabajo, incluso después de sus salidas de proceso. Es importante señalar que, incluso después de la aplicación que creó el PendingIntent se ha matado, que Intención lata sigue funcionando. Una descripción de una acción Intención y el objetivo de realizar con él. Instancias de esta clase se crean con getActivity (Contexto, int, Intención, int), getBroadcast (Contexto, int, Intención, int), getService (Contexto, int, Intención, int); el objeto devuelto puede ser entregado a otras aplicaciones para que puedan realizar la acción que ha descrito en su nombre en un momento posterior.

Al dar un PendingIntent a otra aplicación, el usuario garantiza que el derecho a realizar la operación que ha especificado como si la otra aplicación era a sí mismo (con los mismos permisos y la identidad). Como tal, se debe tener cuidado con la forma de construir el PendingIntent:. A menudo, por ejemplo, la base de Intención que proporcione tendrá el nombre del componente establecido explícitamente a uno de sus propios componentes, para asegurar que está en última instancia, envió allí y en ninguna otra parte

sí A PendingIntent es simplemente una referencia a un contador mantenido por el sistema que describe los datos originales utilizados para recuperarlo. Esto significa que, incluso si su proceso de ser dueño de aplicación se mató, el propio PendingIntent solución se puede utilizar en otros procesos que se han dado. Si la aplicación de creación de nuevo más tarde recupera el mismo tipo de PendingIntent (misma operación, misma acción Intención, los datos, las categorías y componentes, y las mismas banderas), recibirá un PendingIntent en representación de la misma manera, si eso es aún válida y puede por lo tanto llamado cancel () para eliminarla.

A la espera de Intención es la intención que proporciona todos los permisos a otra aplicación para hacer unas obras particulares. Cuando se destruye la actividad principal, el sistema operativo Android lleva de nuevo el permiso de ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top