2013-04-25 20 views
6

NECESSITÀ: Sto semplicemente cercando di ottenere la dimensione della cache occupata di ciascuna applicazione installata nel mio telefono.Come ottenere la dimensione esatta della directory della cache: android

MIO APPROCCIO:

PackageManager packageManager = getPackageManager(); 
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo packageInfo : packages) 
{ 
    try 
    { 
     Context mContext = createPackageContext(packageInfo.packageName, CONTEXT_IGNORE_SECURITY); 
     File cacheDirectory = mContext.getCacheDir(); 
     if(cacheDirectory==null) 
     { 
      cacheArrayList.add("0"); 
     } 
     else 
     { 
      cacheArrayList.add(String.valueOf(cacheDirectory.length()/1024)); 
     } 
    } 
    catch (NameNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 

RISULTATO: Se la directory è nullo è il ritorno 0 (come condizione). Ma se la directory ha già la sua restituzione di 4 Kb sempre. Ho controllato la cache delle mie applicazioni seguendo il processo:

Regolazioni: -> Applicazioni: -> ApplicationName

Ma ho trovato la sua 0B lì.

Perché il suo accadere può spiegare qualcuno? e come ottengo la dimensione esatta della cache?

risposta

9

La lunghezza della chiamata in una directory non sempre restituisce la dimensione corretta. Si può provare a scorrere l'elenco dei file e sommare tutte le dimensioni dei file per ottenere la dimensione totale della directory.

Ti piace questa:

long size = 0; 
File[] files = cacheDirectory.listFiles(); 
for (File f:files) { 
    size = size+f.length(); 
} 
+0

dove posso metti/sostituisci questo codice w esimo ?? – MaggotSauceYumYum

0

otterrete cachesize da questa funzione

public void clearCache() { 
    //clear memory cache 

    long size = 0; 
    cache.clear(); 

    //clear SD cache 
    File[] files = cacheDir.listFiles(); 
    for (File f:files) { 
     size = size+f.length(); 
    // f.delete(); 
    } 
} 
5

Questo è stato più esatto me:

private void initializeCache() { 
    long size = 0; 
    size += getDirSize(this.getCacheDir()); 
    size += getDirSize(this.getExternalCacheDir()); 
    ((TextView) findViewById(R.id.yourTextView)).setText(readableFileSize(size)); 
} 

public long getDirSize(File dir){ 
    long size = 0; 
    for (File file : dir.listFiles()) { 
     if (file != null && file.isDirectory()) { 
      size += getDirSize(file); 
     } else if (file != null && file.isFile()) { 
      size += file.length(); 
     } 
    } 
    return size; 
} 

public static String readableFileSize(long size) { 
    if (size <= 0) return "0 Bytes"; 
    final String[] units = new String[]{"Bytes", "kB", "MB", "GB", "TB"}; 
    int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
    return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
} 

Original post of the string to bytes formatting code

+1

Questa risposta è più completa e più generica, quindi può essere utilizzata ovunque. –

Problemi correlati