Come posso cancellare la cache dell'applicazione Android?

Scrivo un'applicazione che consente di eliminare automaticamente la cache di applicazioni di tutte le applicazioni di terze parti installate sul dispositivo. Di seguito è riportto lo snippet di codice per Android 2.2

public static void trimCache(Context myAppctx) { Context context = myAppctx.createPackageContext("com.thirdparty.game", Context.CONTEXT_INCLUDE_CO|Context.CONTEXT_IGNORE_SECURITY); File cachDir = context.getCacheDir(); Log.v("Trim", "dir " + cachDir.getPath()); if (cachDir!= null && cachDir.isDirectory()) { Log.v("Trim", "can read " + cachDir.canRead()); String[] fileNames = cachDir.list(); //Iterate for the fileName and delete } } 

Il mio manifesto ha i seguenti permessi:

  • Socket TCP Trasferimento dati da PC a dispositivo Android (Android NDK)
  • Integrazione di SignalR in studio di android
  • C'è una compilazione di bug specifici per i dispositivi Android?
  • android java.net.ProtocolException: la connessione è già stata stabilita
  • ricerca persiana / araba in sqlite android dà un risultato negativo
  • Definire la posizione di avvio zoom / pan con KenBurnsView
  • android.permission.CLEAR_APP_CACHE
    android.permission.DELETE_CACHE_FILES

    Ora il problema è che il nome della directory di cache viene printingto ma l'elenco dei file cachDir.list() restituisce sempre null. Non riesco a cancellare la directory di cache poiché l'elenco dei file è sempre nullo.

    C'è un altro modo per cancellare la cache dell'applicazione?

    4 Solutions collect form web for “Come posso cancellare la cache dell'applicazione Android?”

    "android.permission.CLEAR_APP_CACHE" android.permission.DELETE_CACHE_FILES "

    Le applicazioni SDK ordinarie non possono contenere l'authorization DELETE_CACHE_FILES . Mentre è ansible tenere CLEAR_APP_CACHE , non c'è nulla nell'SDK di Android che ti consente di cancellare la cache di un'applicazione.

    C'è un altro modo per cancellare la cache dell'applicazione?

    È ansible cancellare la propria cache eliminando i file in quella cache.

    poate iti merge asta

     static int clearCacheFolder(final File dir, final int numDays) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { //first delete subdirectories recursively if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, numDays); } //then delete the files and subdirectories in this dir //only empty directories can be deleted, so subdirs have been done first if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { Log.e("ATTENTION!", String.format("Failed to clean the cache, error %s", e.getMessage())); } } return deletedFiles; } public static void clearCache(final Context context, final int numDays) { Log.i("ADVL", String.format("Starting cache prune, deleting files older than %d days", numDays)); int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays); Log.i("ADVL", String.format("Cache pruning completed, %d files deleted", numDeletedFiles)); } 

    Controlla android.content.pm.PackageManager.clearApplicationUserData: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/content/pm/ PackageManager.java/ Gli altri methods nascosti in quella class potrebbero essere utili.

    Nel caso in cui non si siano mai utilizzati methods nascosti prima, è ansible accedere a methods nascosti utilizzando la riflessione Java.

    Non sono sicuro di come sia opportuno questo in termini di convenzione, ma questo funziona finora per me nella mia class Globale di Applicazione:

      File[] files = cacheDir.listFiles(); for (File file : files){ file.delete(); } 

    Naturalmente, questo non riguarda le directory nidificate, che potrebbero essere eseguite con una function ricorsiva come questa (non estesamente testata con le sottodirectory):

     deleteFiles(cacheDir); private void deleteFiles(File dir){ if (dir != null){ if (dir.listFiles() != null && dir.listFiles().length > 0){ // RECURSIVELY DELETE FILES IN DIRECTORY for (File file : dir.listFiles()){ deleteFiles(file); } } else { // JUST DELETE FILE dir.delete(); } } } 

    Non ho usato File.isDirectory perché non era affidabile nei miei test.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.