Domanda

Ho creato un'applicazione che crea e archivia 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?

È stato utile?

Soluzione

Non c'è modo per la tua applicazione di sapere che è in corso di disinstallazione (senza modificare il kernel). Tutti i file creati in data / data / your.app.package vengono eliminati automaticamente alla disinstallazione dell'applicazione.

Non credo che nulla sia stato cancellato dalla sdcard. Puoi fare un rapido test 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ò fare il lavoro di pulizia.

Altri suggerimenti

Sembra che ci siano stati degli sviluppi dal 2009 :).

Dalla documentazione :

  

Se stai usando API Level 8 o   maggiore, usa getExternalCacheDir () su   aprire un file che rappresenta il file   directory di archiviazione esterna dove tu   dovrebbe salvare i file della cache. Se l'utente   disinstalla la tua applicazione, questi   i file verranno automaticamente cancellati.   Tuttavia, durante la vita del tuo   applicazione, è necessario gestirli   memorizzare nella cache i file e rimuoverli   non sono necessari per preservare   spazio file.

     

Se stai utilizzando API Level 7 o precedente,   usa getExternalStorageDirectory () su   aprire un file che rappresenta la radice   della memoria esterna, quindi scrivere   i dati della cache di seguito   directory:

     

/ Android / dati // cache /   È il tuo stile Java   nome del pacchetto, ad esempio   & Quot; com.example.android.app ".

Anche quando si utilizza getExternalCacheDir () , ho visto che la directory della cache, che è il nome del pacchetto dell'app, non viene rimossa automaticamente come indicato nella documentazione di Android, almeno non nel Lenovo A1. Potrebbe essere un po 'ingenuo ma potresti voler ripulire i dati precedenti durante la reinstallazione. Qui puoi scoprire se l'app non è stata installata o è stata installata per la prima volta: memorizzi un valore, forse un valore booleano, usando le preferenze condivise. Può essere qualcosa del tipo:

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 l'app viene eseguita, verifica se è la prima volta che viene eseguita. Quando l'app viene rimossa, lo saranno anche le preferenze condivise per l'app. Quindi, la prossima volta che viene installato, if (...) sarà vero e puoi fare un po 'di pulizia lì.

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.

Lo sto aggiungendo perché le risposte esistenti sono obsolete nel 2017. Sebbene sia vero che non è possibile richiamare la disinstallazione dell'app, sono stati forniti alcuni meccanismi per preservare i dati dell'app oltre alla disinstallazione.

  • Da Android 6.0 (API 23), il Backup automatico per Apps è stata introdotta la funzionalità che ha consentito agli sviluppatori di consentire o impedire il backup automatico delle applicazioni. A partire dall'API 23 il backup è abilitato per impostazione predefinita.

  • Sono stati introdotti due nuovi tag applicazione per il file manifest: android: allowBackup e android: fullBackupContent .

Per annullare il backup automatico, aggiungi android: allowBackup = " false " al file manifest sotto il tag application . Un valore di "vero" salverà automaticamente le preferenze e i database condivisi sul cloud, nonché altri file .

In secondo luogo, puoi essere molto specifico sui file che desideri includere o escludere per la cancellazione o conservazione alla 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 puoi aggiungere i tipi di file specifici da includere o escludere e i loro percorsi associati. Aggiungi il tag android: fullBackupContent = " @ xml / my_backup_rules " al file manifest sotto il tag application .

Verrà eseguito il backup dei file specificati su Google Drive nell'account di posta elettronica principale del dispositivo. I dati verranno ripristinati al momento della reinstallazione a condizione che la seguente impostazione sia abilitata dall'utente :

Impostazioni - > Backup e amp; Ripristina - > Ripristino automatico .

Va ??inoltre notato che i dati di backup non possono essere letti dall'utente o da altre applicazioni sul dispositivo.

 inserisci qui la descrizione dell'immagine

Lo stesso è accessibile anche dall'app Google Drive da qui:

Google Drive - > Impostazioni - > Backup automatico per app - > Backup e ripristino

 inserisci qui la descrizione dell'immagine

Vale la pena notare che se lo stesso account Google primario viene utilizzato per più dispositivi, vengono creati backup di più dispositivi. I backup per i singoli dispositivi sono accessibili da qui:

Google Drive - > Impostazioni - > I backup

 Google Drive - loading= Impostazioni -> Backup ">

sembra che da allora vi sia una corretta soluzione, Context.getExternalFilesDir () :

  

Restituisce il percorso assoluto della directory sul filesystem esterno   (ovvero da qualche parte su Environment.getExternalStorageDirectory ()) dove   l'applicazione può inserire file persistenti di sua proprietà. Questi file sono   privato per le applicazioni e in genere non visibile all'utente come   mezzi di comunicazione.

     

Questo è come getFilesDir () in quanto questi file verranno eliminati quando   l'applicazione è disinstallata

se si desidera archiviare dati di grandi dimensioni, archiviarli in un archivio esterno con il nome del percorso del file come

Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"

dove nome pacchetto è il nome del pacchetto dell'app, ad esempio com.think.abc

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