2011-12-14 18 views
7

ho bisogno di eseguire un'azione quando la mia applicazione è installata. Ho esaminato l'utilizzo diintento Android quando viene installata l'app MY

Intent.PACKAGE_ADDED 

ma non ricevo l'intento nell'app che si sta installando. Voglio eseguire il codice quando la mia app viene installata per la prima volta.

il caso d'uso è la registrazione con un servizio online. Posso elencare per BOOT_COMPLETED che va bene se l'app è già installata, ma ho bisogno di gestire il caso quando l'utente installa per la prima volta l'app.

questo post, Can you run an intent or script when your app gets installed on Android?

suggerisce l'ascolto di TIMER_TICK e la prima trasmissione, eseguire la registrazione e impostare un flag in modo da non eseguirla al prossimo TIMER_TICK. questo sembra problematico perché se fai qualcosa o no nel ricevitore, stai ancora avviando il tuo ricevitore ogni singolo minuto e utilizzi la batteria nel processo.

c'è una soluzione migliore?

risposta

5

Non esiste un evento affidabile che è possibile rilevare. Anche TIMER_TICK funzionerà solo sotto Android 3.1. Dal 3.1. in poi non è possibile ricevere trasmissioni di sistema fino a quando l'app non è in stato attivo (il che significa che l'utente deve avviarlo almeno una volta manualmente).

controlli lanciare sul applicazioni smesso

A partire da Android 3.1, il gestore di pacchetti del sistema tiene traccia di applicazioni che sono in uno stato di interruzione e fornisce un mezzo per controllare il loro lancio da processi in background e altre applicazioni .

[...]

Si noti che il sistema aggiunge FLAG_EXCLUDE_STOPPED_PACKAGES a tutti intenti broadcast. Fa questo per impedire che le trasmissioni dai servizi di sfondo avvengano inavvertitamente o senza necessità su componenti delle applicazioni interrotte . [..]

applicazioni sono in uno stato di arresto quando sono installati prima ma non sono ancora lanciate e quando vengono fermati manualmente dall'utente (in Gestisci applicazioni).

dal 3.1. release notes

vi consiglio di fare il vostro lavoro intitial quando l'utente avvia la tua applicazione per la prima volta.

+0

Penso che tu abbia un errore di battitura - la tua prima frase non dovrebbe essere "Non è affidabile nemmeno quello che puoi catturare"? – CommonsWare

+0

@CommonsWare Ops, hai ragione di nuovo. Grazie! :) –

+1

Nota che se vuoi seguire il suggerimento di alextsc di fare il tuo lavoro iniziale quando l'utente avvia la tua app per la prima volta, c'è una nuova trasmissione esattamente per questo: [ACTION_PACKAGE_FIRST_LAUNCH] (http://developer.android.com/ di riferimento/android/content/Intent.html # ACTION_PACKAGE_FIRST_LAUNCH). – kabuko

0

Se si è disposti ad assumere che l'app Google Android Market sia installata, è possibile utilizzare INSTALL_REFERRER. Vedi Get referrer after installing app from Android Market per maggiori informazioni.

+0

Questo non dovrebbe più funzionare da Android 3.1. Non è possibile ricevere trasmissioni finché l'utente non avvia manualmente l'applicazione la prima volta. – CommonsWare

+0

Ah, non ero a conoscenza di quel CommonsWare, grazie. La trasmissione verrà accodata in qualche modo e verrà ricevuta all'avvio dell'app? – kabuko

+0

Forse. Non ho studiato quello. In generale, le trasmissioni non vengono messe in coda, ma il mercato potrebbe fare qualcosa di speciale per quello - non ne sono sicuro. – CommonsWare

1

Con il nuovo mercato, l'intento INSTALL_REFERRER viene attivato al momento del lancio ora per Android 3.1 e versioni successive. Quindi possiamo riceverlo nella nostra app. Tuttavia, al momento dell'installazione, si accende ancora per 2.2 quando l'app è in stato di arresto.Quindi non sono in grado di riceverlo in caso di Froyo.

Problemi correlati