Ho creato un'applicazione che crea e memorizza i file su sdcard. C'è un modo per associare la cartella con l'applicazione al fine di eliminare tutti i file quando l'utente esegue la disinstallazione sul dispositivo Android?Android - Conserva o elimina i file creati dall'applicazione alla disinstallazione
risposta
Non c'è modo per la vostra applicazione di sapere che viene disinstallata (senza modificare il kernel). Tutti i file creati in data/data/pacchetto your.app. vengono cancellati automaticamente al momento dell'installazione.
Non penso che nulla sia cancellato dalla sdcard. Puoi fare un test rapido e scoprirlo.
Un altro approccio potrebbe essere quello di avere un'altra applicazione che controlla se questa applicazione è installata o meno. In caso contrario, può eseguire il lavoro di pulizia.
L'applicazione 'NQ Mobile Security' sta chiamando un'attività su uninstall http://i.imgur.com/Fos9N.png, http: //i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png e la domanda http://stackoverflow.com/questions/10219328/how-to-show-an-activity-before-my-app-is-uninstall-android –
Per le app compilate per Android 6.0 o versioni successive e i backup cloud abilitati, consultare la risposta di Y.S. – dermatthias
Sembra che ci siano stati degli sviluppi dal 2009 :).
Dal documentation:
Se stai usando API livello 8 o maggiore, utilizzare
getExternalCacheDir()
a aprire un file che rappresenta la directory di archiviazione esterna dove dovrebbe salvare i file di cache. Se l'utente disinstalla l'applicazione, questi file verranno automaticamente eliminati. Tuttavia, durante la vita della vostra applicazione , si dovrebbe gestire questi file cache e rimuovere quelli che non sono necessari al fine di preservare spazio file.Se stai usando API Livello 7 o inferiore, uso
getExternalStorageDirectory()
ad aprire un file che rappresenta la radice della memorizzazione esterno, quindi scrivere i dati della cache nella directory seguente:/Android/data // cache/ È il nome del pacchetto stile Java, ad esempio "com.example.android.app".
se si desidera memorizzare grandi quantità di dati poi conservarla in una memoria esterna del file di nome del percorso come
Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"
in cui il nome del pacchetto è la vostra applicazione nome del pacchetto per esempio com.think.abc
Anche quando si utilizza getExternalCacheDir()
, ho visto che la directory della cache, che è il nome del pacchetto dell'app, non viene rimossa automaticamente come si dice nella documentazione di Android, almeno non su Lenovo A1. Potrebbe essere un po 'ingenuo, ma potresti voler ripulire i dati precedenti durante la reinstallazione. Lì, puoi scoprire se la tua app non è stata installata o è stata installata per la prima volta: memorizzi un valore, forse un valore booleano, utilizzando le preferenze condivise. Può essere qualcosa di simile:
SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE);
if(sharedPrefs.getBoolean("AppInstalled", false) == false){
//DELETE APP DIRECTORY
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putBoolean("AppInstalled", true);
editor.commit();
}
In questo modo, ogni volta che viene eseguito l'app, controlla se è la prima volta che è in esecuzione. Quando l'app viene rimossa, anche le preferenze condivise per l'app. Quindi, la volta successiva che viene installato, if (...) sarà vero e sarà possibile eseguire alcune operazioni di pulizia.
So che questo non risponde direttamente alla domanda e non è bello lasciare dati inutilizzati sui dispositivi degli utenti, ma penso che potrebbe essere un'alternativa al tentativo di ripulire quando un'app viene rimossa, il che è ragionevole ma sembra impossibile.
Non so se ho capito male, ma sembra che funzionerà come previsto se lo usi dalla prima versione dell'app, sei d'accordo? –
sembra da allora v'è un soltuion corretta, Context.getExternalFilesDir():
restituisce il percorso assoluto della directory nel filesystem esterna (vale a dire da qualche parte sul Environment.getExternalStorageDirectory()) dove l'applicazione può posiziona i file persistenti che possiede. Questi file sono privati per le applicazioni e in genere non sono visibili all'utente come supporto .
Questo è come getFilesDir() in quanto verranno eliminati questi file quando l'applicazione viene disinstallata
Sto aggiungendo questo perché le risposte esistenti sono obsoleti nel 2017. Se è vero che ci non è una funzione di callback sulla disinstallazione dell'app, sono stati forniti alcuni meccanismi per preservare i dati delle app oltre la disinstallazione.
Da Android 6.0 (API 23), la funzione Auto Backup for Apps stato introdotto, che ha permesso agli sviluppatori di permettere o impedire il backup applicazione automatica. A partire da API 23 il backup è abilitato per impostazione predefinita.
Sono stati introdotti due nuovi tag
application
per il file manifest:android:allowBackup
eandroid:fullBackupContent
.
di scegliere di backup automatico, aggiungere android:allowBackup="false"
per il file manifesto sotto il tag application
. Un valore di "true" salverà automaticamente le preferenze ei database condivisi nel cloud, nonché other files.
In secondo luogo, si può essere molto specifiche sui file che si desidera includere o escludere per l'eliminazione o la conservazione sulla disinstallazione con il tag android:fullBackupContent
. Questo attributo punta a un file XML che contiene regole di backup. Creare un file di configurazione XML nella directory res/xml/
con la seguente sintassi:
<full-backup-content>
<include domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
<exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
</full-backup-content>
Qui è possibile aggiungere i tipi di file specifici da includere o escludere e loro percorsi associati. Aggiungi il tag android:fullBackupContent = "@xml/my_backup_rules"
al file manifest sotto il tag application
.
i file specificati verranno salvati su Google Drive con l'account di posta elettronica principale del dispositivo. I dati verrebbero ripristinati al momento della reinstallazione a condizione che l'utente abbia abilitato la seguente impostazione:
Settings -> Backup & Reset -> Automatic Restore
.
Va inoltre notato che i dati di backup non possono essere letti dall'utente o altre applicazioni sul dispositivo.
Lo stesso si può accedere anche dal l'applicazione Google Drive da qui:
Google Drive -> Settings -> Auto backup for apps -> Backup and reset
Vale la pena notare che se la stessa primario account Google viene utilizzato per più dispositivi, quindi vengono creati backup di più dispositivi. I backup di singoli dispositivi si può accedere da qui:
Google Drive -> Settings -> Backups
Ottima risposta. Stava cercando esattamente questo. Nel 2017 (o da Android 6.0) questa è la risposta corretta. – dermatthias
@ Y.S. risposta perfetta: D –
L'applicazione 'NQ mobile security' sta chiamando un'attività a guardare disinstallazione al http://i.imgur.com/ Fos9N.png, http://i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png e la domanda http://stackoverflow.com/questions/10219328/how-to- show-an-activity-before-my-app-is-uninstall-android –