2010-04-21 20 views
9

C'è un modo per ottenere una notifica di sistema quando un'app è stata disinstallata?Rileva se un'app è stata disinstallata

Vorrei mantenere una tabella di tutte le informazioni dei clienti che attualmente utilizzano la mia app. Tuttavia, ciò sembra impossibile se non c'è modo di rilevare questo evento.

La prima soluzione a cui riesco a pensare è di avere un servizio sempre in esecuzione in background per ascoltare android.intent.action.PACKAGE_REMOVED. Ma poi quel servizio verrebbe ucciso una volta che il processo di disinstallazione fosse terminato, o sarebbe stato fermato appena prima che il processo fosse avviato? Inoltre, anche se questa è una soluzione, ha il potenziale di rimandare molte persone quando si rendono conto che parte dell'app è in esecuzione in background.

Qualche suggerimento? Grazie!

+0

Potrebbe trovare qualche soluzione al problema? –

risposta

6

Si potrebbe semplicemente farlo al contrario e mantenere un tavolo di utenti che utilizzano attivamente la tua app. Basta chiamare un webservice in un punto del programma che mostra che è attivo. Se un'app non viene utilizzata per un certo periodo, contrassegnarla come inattiva.

6

Il documentation for the PACKAGE_REMOVED action dice il seguente:

Il pacchetto che viene disinstallato fa non ricevere questo intento.

Così è possibile monitorare la disinstallazione di altre applicazioni ma non la propria.

Quindi probabilmente dovrai monitorare chi sta ancora utilizzando la tua applicazione, non chi ha smesso di usarla. Se non si desidera che il sovraccarico di avere il proprio server per farlo, è possibile utilizzare un servizio gratuito come Flurry.

+1

Chi ha utilizzato la mia app di recente non è una misurazione accurata e questo non soddisfa le mie esigenze. Sto usando GAE quindi non sono preoccupato per il lato server. – mobilekid

+0

Come si monitora la disinstallazione dell'app con flurry? Questo è esattamente ciò di cui ho bisogno ma non riesco davvero a scoprire come farlo. – mkorszun

1

Da documento di Android, l'app disinstallato da utente non può non ottenere

Intent.ACTION_PACKAGE_REMOVE 

Ma possiamo utilizzare altro metodo per implementare questa funzione. Sappiamo tutti che esiste una directory denominata con il nome del pacchetto nella directory/data/data dopo che l'app è stata installata dall'utente. Se la tua app viene disinstallata dall'utente, la directory root della tua app (/ data/data/com.example.yourappname) verrà rimossa dal sistema. L'azione di rimozione si verifica immediatamente quando l'utente fa clic su "Disinstalla" e la directory verrà rimossa dal sistema di gestione dei pacchetti framework.

Quindi, possiamo monitorare l'esistenza della directory dei dati dell'app (che di solito /data/data/com.example.yourappname) per rilevare se l'app è stata disinstallata dall'utente.

Per monitorare questa directory, è necessario eseguire il fork di un processo distaccato da JNI. In questo nuovo processo di fork, possiamo usare il sistema Linux inotify (7) o access (3) per determinare l'esistenza della directory dei dati dell'app.

Here è un'implementazione praticabile. Ma ha ottenuto il problema del permesso quando prova a inviare un intento di avviare il browser di sistema sul dispositivo Android ad alta versione. Non ho idea di come bypassare questo. Tuttavia, l'esempio sopra è sufficiente per la tua domanda.

Spero che sarà utile!

0

Android non fornisce una funzione integrata per il monitoraggio della disinstallazione dell'app.

La notifica può essere utilizzata come un modo alternativo per tenere traccia della disinstallazione dell'app. Per questo invia una notifica sull'app e traccia lo stato della notifica. Contare il numero di notifiche non consegnate per un particolare periodo di tempo. Se lo stato della notifica non consegnata non cambia in quel particolare periodo di tempo, allora considera che l'app è stata disinstallata dal dispositivo.

Ad esempio, ho utilizzato uno script cron che viene eseguito ogni 3 giorni e controllare lo stato delle ultime 10 notifiche inviate al dispositivo (2 notifiche vengono inviate in un giorno). Se tutte queste 10 notifiche hanno lo stato "non consegnato", l'app viene considerata come disinstallata dal dispositivo.

Problemi correlati