22

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

+0

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 –

risposta

10

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.

+0

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 –

+0

Per le app compilate per Android 6.0 o versioni successive e i backup cloud abilitati, consultare la risposta di Y.S. – dermatthias

23

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".

0

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

4

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.

+0

Non so se ho capito male, ma sembra che funzionerà come previsto se lo usi dalla prima versione dell'app, sei d'accordo? –

3

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

3

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 e android: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.

enter image description here

Lo stesso si può accedere anche dal l'applicazione Google Drive da qui:

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

enter image description here

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

Google Drive -> Settings -> Backups

+1

Ottima risposta. Stava cercando esattamente questo. Nel 2017 (o da Android 6.0) questa è la risposta corretta. – dermatthias

+1

@ Y.S. risposta perfetta: D –

Problemi correlati