Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I clear the Android app cache?

Tags:

android

I am writing a app which can programatically clear application cache of all the third party apps installed on the device. Following is the code snippet for 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
    }
}

My manifest has following permissions:

android.permission.CLEAR_APP_CACHE
android.permission.DELETE_CACHE_FILES

Now the problem is that the name of the cache directory is printed but the list of files cachDir.list() always returns null. I am not able to delete the cache directory since the file list is always null.

Is there any other way to clear the application cache?

like image 577
Srao Avatar asked Dec 12 '11 12:12

Srao


People also ask

How do I view app cache on Android?

On Android Studio you can use Device File Explorer to view /data/data/your_app_package/cache. Click View > Tool Windows > Device File Explorer or click the Device File Explorer button in the tool window bar to open the Device File Explorer.

Is it good to clear cache on Android?

Why clear the cache on an Android phone? Clearing your cache on Android can free up valuable space and resolve issues with your phone's battery, speed, and security. Old cached data can corrupt, causing larger performance problems.

What happens when you clear cache on an app?

Simply offload the individual app to free up some temporary space on your device. Tip: Clearing the cache simply clears temporary files. It won't erase login credentials, downloaded files, or custom settings.


3 Answers

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

Ordinary SDK applications cannot hold the DELETE_CACHE_FILES permission. While you can hold CLEAR_APP_CACHE, there is nothing in the Android SDK that allows you to clear an app's cache.

Is there any other way to clear the application cache?

You are welcome to clear your own cache by deleting the files in that cache.

like image 187
CommonsWare Avatar answered Oct 06 '22 02:10

CommonsWare


Check out 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/ The other hidden methods in that class might be useful, too.

In case you've never used hidden methods before, you can access hidden methods using Java reflection.

like image 42
tigeroctopus Avatar answered Oct 06 '22 03:10

tigeroctopus


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));
    }
like image 29
OWADVL Avatar answered Oct 06 '22 03:10

OWADVL