Domanda

Io sono un newbie di Android.Ho letto l'Android Documentazione, ma ho ancora bisogno di ulteriori chiarimenti.Qualcuno può dirmi che cosa è esattamente un PendingIntent è?

È stato utile?

Soluzione

Un PendingIntent è un token che si dà a una domanda estera (ad esempio NotificationManager, AlarmManager, casa AppWidgetManager schermo, o di altre applicazioni di terze parti), che consente all'applicazione estera per utilizzare le autorizzazioni della propria applicazione per eseguire un pezzo predefinito di codice .

Se si dà la domanda estera di intenti, si eseguirà il vostro Intent con i propri permessi. Ma se si dà la domanda estera di un PendingIntent, che l'applicazione eseguirà il vostro Intent con il permesso della propria applicazione.

Altri suggerimenti

INTENTO

Gli intenti sono gli standard di un meccanismo di messaggistica di Android, che esprime l'intenzione dell'utente per eseguire alcuni lavori.Essi consentono di interagire con altri componenti definiti dall'utente o dal sistema operativo Android.

Esempio:

  1. Trasmettere un messaggio
  2. Avviare la fotocamera
  3. Avviare un servizio
  4. Avviare un'attività
  5. Per visualizzare una pagina web o un elenco di contatti
  6. Comporre un numero di telefono o rispondere a una telefonata

    Essi sono utilizzati in entrambi i modi

1) la chiamata di un componente

2)il sistema di notifica degli eventi.

La logica del flusso di lavoro per la creazione di un intento è di solito come segue:

  • Creare l'Intento
  • b.Aggiungere Intento opzioni-> Ex.che tipo di intento che stiamo inviando il sistema operativo o di eventuali attributi associati con l'intento, come una stringa di testo o di qualcosa che è stato superato con l'intento
  • c.ESEGUIRE l'Intento

Esempio Reale:Diciamo che mi sveglio la mattina e mi "INTENDO"per andare al bagno.Io prima di PENSARE di andare al bagno, ma che NON mi fa andare al bagno.Io poi devo dire che il mio cervello si scendere dal letto prima, poi a piedi per il bagno, e poi rilascio, quindi vai e lavarmi le mani, poi vai e asciugo le mani.Una volta so dove sto andando mi INVIA il comando per iniziare e il mio corpo entra in azione.

PENDINGINTENT

Un PendingIntent consente di specificare l'azione da intraprendere in futuro.Esso consente di passare in un futuro Intento a un'altra applicazione e consentire l'applicazione per l'esecuzione di Intenti, come se avesse il same permissions as your application, se la vostra applicazione è ancora in giro quando l'Intento è, infine, richiamato.È un segno che si dà a una domanda straniera, che consente l'applicazione esterna per l'uso dell'applicazione delle autorizzazioni per l'esecuzione di un predefinito pezzo di codice.

Dando un PendingIntent a un'altra applicazione, l'utente concede il diritto di eseguire l'operazione specificata come se l'applicazione è stata da soli (con le stesse autorizzazioni e identità).Come tale, si dovrebbe essere attenti a come si costruisce il PendingIntent:spesso, ad esempio, la base Intento di fornitura avrà il nome del componente di impostare in modo esplicito a uno dei propri componenti, sia, infine, mandato lì e in nessun altro luogo.

Si tratta di un Intento di azione che si desidera eseguire, ma in un secondo tempo.Pensate a mettere un Intento su ghiaccio.La ragione per cui è necessario, infatti, un Intento deve essere creato e lanciato da un valido Context nell'applicazione, ma ci sono alcuni casi in cui uno non è disponibile al momento in cui si desidera eseguire l'azione, perché è tecnicamente al di fuori dell'applicazione di contesto (i due esempi comuni sono il lancio di un'Attività da una comunicazione o un BroadcastReceiver.Con la creazione di un PendingIntent si desidera utilizzare per avviare, ad esempio, un'Attività durante la Context per farlo (dall'interno di un'altra Attività o Servizio)

In continuità con l'esempio della vita reale:diciamo che voglio fare una doccia, ma voglio fare la doccia, DOPO che mi lavo i denti e mangiare la prima colazione.Così so di non essere la doccia per almeno 30-40 minuti.Ho ancora nella mia testa che ho bisogno di preparare i miei vestiti, e poi a piedi su per le scale indietro per il bagno, per poi spogliarsi e poi doccia.Tuttavia, questo non accadrà fino a quando 30-40 minuti sono passati.Ora ho una in SOSPESO intento a fare la doccia.Si è in ATTESA per 30-40 minuti.

Che è praticamente la differenza tra un Attesa di Intenti e di un Regolare Intento.In breve:

Regolare Intento -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

In Attesa Di Intenti -> REQUIRES A REGULAR INTENT TO BE CREATED

Gli intenti sono di due tipi- Esplicito e Implicito

Intento Esplicito:Quando l'applicazione è a conoscenza di quale componente chiamata per eseguire una certa azione

Implicito Intento:Quando l'applicazione non è a conoscenza di quale componente possa eseguire l'azione desiderata.Per Es, Se, semplicemente, dire che si desidera visualizzare un URL, il sistema decide quale componente di soddisfare l'intenzione.

Per di più, meglio e chiara idea circa gli effetti.Trovate di seguito i link

  1. Slidenerd.com
  2. Android Intento Tutorial
  3. Alcuni Di Più

Un attesa intenti è un segno che date a qualche app per eseguire un'azione per conto tue app a prescindere dal fatto che il processo di applicazione è vivo o no.

Credo che la documentazione è sufficientemente dettagliata: attesa docs Intent .

Basti pensare a casi d'uso per attesa Intenti come (Broadcasting Intenti, gli allarmi di programmazione) e la documentazione diventerà più chiara e significativa.

Nel mio caso, nessuna delle risposte precedenti né la documentazione ufficiale di google mi ha aiutato a prendere il concetto di classe PendingIntent.

E poi ho trovato questo video, Google I / O 2013, Al di là del Blue Dot session . In questo video, ex-Googler Jaikumar Ganesh spiega cosa PendingIntent è, e che era la cosa mi ha dato il quadro di questo.

Di seguito è solo la trascrizione del video qui sopra ( da 15:24 ).

  

Così che cosa è un attesa di intenti?
  E 'un segno che il processo di applicazione vi darà al processo di posizione, e il processo di posizione si usarlo per svegliare la vostra applicazione quando un evento di interesse accade . Quindi questo significa in pratica che la vostra applicazione in background non deve essere sempre in esecuzione. Quando qualcosa di interessante accade, vi sveglierà. Questo permette di risparmiare un sacco di batteria.

Questa spiegazione diventa più chiaro con questo frammento di codice (che è incluso nella presentazione della sessione).

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(...)   
    }
}

Perché PendingIntent è richiesto? Stavo pensando come

  1. Perché l'applicazione ricevente in sé non può creare il Intent o
  2. Perché non possiamo usare un semplice Intent per lo stesso scopo.

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

Se invio bluetoothIntent a un'altra applicazione, che non ha il permesso android.permission.BLUETOOTH_ADMIN, che riceve l'applicazione non è in grado abilitare Bluetooth con startActivity(bluetoothIntent).

La limitazione è superato utilizzando PendingIntent. Con PendingIntent l'applicazione ricevente, non devono avere android.permission.BLUETOOTH_ADMIN per l'abilitazione Bluetooth. Fonte .

In attesa intento è un intento che prenderà il via ad un certo punto in futuro. inizia intento normali immediatamente quando si passa alla startActivity(Intent) o StartService(Intent).

Un futuro intento che altre applicazioni in grado di utilizzare.
Ed ecco un esempio per la creazione di uno:

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

TAXI ANALOGIA

Intent

Intenti sono tipicamente utilizzati per l'avvio dei servizi. Ad esempio:

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

Questo è come quando si chiama un taxi:

Myself = CurrentClass
Taxi Driver = ServiceClass

In attesa Intent

Sarà necessario usare qualcosa di simile a questo:

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

Ora Questa terza parte verrà avviato il servizio agisca per suo conto. Un'analogia vita reale è Uber o Lyft che sono entrambe le compagnie di taxi.

si invia una richiesta per un giro di Uber / Lyft. Saranno poi andare avanti e chiamare uno dei loro autisti a vostro nome.

Quindi:

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

Un PendingIntent è un token che si dà a un'altra applicazione (ad esempio Gestione notifiche, Alarm Manager o altre applicazioni di terze parti), che permette a questa altra applicazione per utilizzare i permessi della vostra applicazione per eseguire un pezzo predefinito di codice. Per eseguire una trasmissione tramite un intento in attesa in modo da ottenere un PendingIntent via PendingIntent.getBroadcast (). Per eseguire un'attività tramite un intento in attesa di ricevere l'attività tramite PendingIntent.getActivity ().

Che cosa è un Intent?

Un intenti è un comando specifico in Android che consente di inviare un comando per il sistema operativo Android di fare qualcosa di specifico. Pensate a come un'azione che deve avvenire. Ci sono molte azioni che possono essere fatte come ad esempio l'invio di una e-mail, o allegando una foto a una e-mail o anche avviare un'applicazione. Il flusso di lavoro logica di creare un intento di solito è la seguente: un. Creare il Intent b. Aggiungere opzioni Intento -> Ex. che tipo di intenti stiamo inviando al sistema operativo o qualsiasi attributi associati a tale intento, come ad esempio una stringa di testo o di qualcosa che è passato con l'intento c. RUN l'intento

Real Life Esempio: diciamo Let mi sveglio al mattino e mi "intendere" per andare alla toilette. Io per prima cosa pensare di andare al bagno, ma questo non mi ha veramente arrivare alla toilette. Io poi devo dire il mio cervello per alzarsi dal letto prima, poi a piedi alla toilette, e poi rilasciare, poi andare a lavarmi le mani, poi andare a pulire le mie mani. Una volta che so dove sto andando io inviare il comando per iniziare e il mio corpo agisce.

Ciò che è in attesa di Intenti?

Continuando dall'esempio di vita reale, diciamo che voglio fare una doccia, ma voglio fare una doccia dopo mi lavo i denti e consumare la colazione. Quindi so che non sarà la doccia fino ad almeno 30-40 minuti. Ho ancora nella mia testa che ho bisogno di preparare i miei vestiti, e poi a piedi su per le scale di nuovo in bagno, poi spogliarsi e poi doccia. Tuttavia questo non accadrà fino a 30-40 minuti sono passati. Ora ho un ATTESA intento di fare la doccia. E 'in sospeso per 30-40 minuti.

Questo è più o meno la differenza tra un attesa intenti ed un Intent regolare. Intenti regolari possono essere create senza un attesa intenti, tuttavia al fine di creare un intento attesa è necessario disporre di una messa a punto intenti regolare prima.

PendingIntent è fondamentalmente un oggetto che avvolge un altro oggetto Intent. Poi si può passare ad una domanda estera in cui si sta concedendo che applicazione il diritto di eseguire l'operazione, vale a dire, eseguire l'intento come se fosse eseguito dal processo del proprio app (stessa autorizzazione e l'identità). Per motivi di sicurezza si dovrebbe sempre passare intenti espliciti a un PendingIntent piuttosto che essere implicito.

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

In un linguaggio semplice,
 1. Una descrizione di un'azione intenti e Target eseguire. In primo luogo è necessario creare un intento e poi si deve passare una classe specifica di Java che si desidera eseguire, l'intento.
2. È possibile chiamare quelli di classi Java, che è la classe class action da PendingIntent.getActivity, PendingIntent.getActivities (Context, int, intenti [], int), PendingIntent.getBroadcast (Context, int, Intent, int), e PendingIntent. getService (Context, int, Intent, int); Qui si vede che intenti che è viene dal passo 1
3. Si dovrebbe tenere a mente che ... Dando un PendingIntent a un'altra applicazione, l'utente garantisce il diritto di eseguire l'operazione è stato specificato.

Questo è quello che ho imparato dopo una lunga lettura.

A PendingIntent avvolge l'intento generale, con un token che si dà per app stranieri per eseguire con il vostro permesso. Per esempio:

  

La notifica della vostra app musica non può giocare / mettere in pausa la musica, se si   non ha dato il PendingIntent di inviare in onda perché la vostra applicazione musicale   ha il permesso READ_EXTERNAL_STORAGE che l'applicazione di notifica   non lo fa. La notifica è un servizio di sistema (quindi è un app straniera).

Come suggerisce il nome .. PendingIntent

è possibile Pend (farlo dopo un certo tempo) esso. Esso funziona come l'altro ..è intento è un modo di dare il vostro compito a qualche altra applicazione per eseguire a vostro nome.

Un In attesa di intenti specifica un'azione da intraprendere in futuro. Esso consente di passare un futuro intenti a un'altra applicazione e consentire che l'applicazione per eseguire tale intenzione, se avesse le stesse autorizzazioni vostra applicazione, se la vostra applicazione è ancora in giro quando l'intento è infine richiamato.

E 'un segno che si dà a una domanda estera, che consente all'applicazione straniero per utilizzare le autorizzazioni della propria applicazione per eseguire un pezzo predefinito di codice.

Se si dà la domanda estera di un Intent, e che l'applicazione invia / trasmette l'Intento hai dato, che eseguirà il intenti con le proprie autorizzazioni. Ma se invece dà la domanda estera un intento attesa è stato creato utilizzando il proprio consenso, che l'applicazione eseguirà il contenuto intenti con il permesso della propria applicazione.

Per eseguire una trasmissione tramite un attesa di intenti in modo da ottenere un PendingIntent via PendingIntent.getBroadcast (). Per eseguire un'attività tramite un intento in attesa di ricevere l'attività tramite PendingIntent.getActivity ().

Si tratta di un'azione intento che si desidera eseguire, ma in un secondo momento. Pensate a un porre Intent sul ghiaccio. La ragione per cui ce n'è bisogno perché un intento deve essere creato e lanciato da un contesto valido nella propria applicazione, ma ci sono alcuni casi in cui non è disponibile al momento che si desidera eseguire l'azione perché siete tecnicamente al di fuori contesto dell'applicazione (la due esempi comuni stanno lanciando un'attività da una notifica o un BroadcastReceiver.

Con la creazione di un PendingIntent che si desidera utilizzare per il lancio, ad esempio, un'attività mentre avete la Context di farlo (da dentro un'altra attività o servizio) è possibile passare l'oggetto intorno a qualcosa di esterno in modo che esso per parte di lancio della vostra applicazione a vostro nome.

A PendingIntent fornisce un mezzo per applicazioni di funzionare, anche dopo le loro uscite di processo. E 'importante notare che, anche dopo l'applicazione che ha creato il PendingIntent è stato ucciso, in grado di intenti ancora eseguito. Una descrizione di un'azione intenti e di destinazione per eseguire con esso. Le istanze di questa classe sono creati con getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); l'oggetto restituito può essere consegnato ad altre applicazioni in modo che possano eseguire l'azione che hai descritto per vostro conto in un secondo momento.

Per dare un PendingIntent a un'altra applicazione, l'utente garantisce il diritto di eseguire l'operazione è stato specificato come se l'altra applicazione è da soli (con le stesse autorizzazioni e identità). Come tale, si deve fare attenzione a come si costruisce la PendingIntent:. Spesso, ad esempio, la base di intenti si fornisce avrà il nome del componente esplicitamente impostata su uno dei vostri propri componenti, per assicurarsi che sia in ultima analisi, ci ha inviato e non altrove

A PendingIntent sé è semplicemente un riferimento a un token mantenuto dal sistema che descrive i dati originali utilizzati per recuperarla. Ciò significa che, anche se il processo di sua applicazione proprietaria viene ucciso, il PendingIntent in sé rimarrà utilizzabile da altri processi che sono state date esso. Se l'applicazione creando successivamente ri-recupera lo stesso tipo di PendingIntent (stessa operazione, stessa azione intenti, i dati, le categorie, e componenti, e le stesse bandiere), riceverà un PendingIntent che rappresenta lo stesso motivo, se questo è ancora valido e può così chiamata annullare () per rimuoverlo.

In attesa di intenti è un intento che fornisce tutte le autorizzazioni ad altre applicazioni per fare un particolare opere. Quando l'attività principale è distrutto, Android OS riprende il permesso da esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top