Android examples for App:Cache
clean External Cache
/*/*from w ww.ja v a2 s . c o m*/ * Copyright (C) 2011 Catch.com * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. * * Harry Tormey <harry@catch.com> Modified by Omar Pera <omar@androidsx.com> */ //package com.book2s; import java.io.File; import java.io.IOException; import android.content.Context; import android.os.Environment; import android.text.format.DateUtils; import android.util.Log; public class Main { private static final String NOMEDIA_FILENAME = ".nomedia"; private static final long CACHE_FILE_EXPIRATION = DateUtils.DAY_IN_MILLIS * 7; private static final String TAG = "FileCacheUtil"; public static void cleanExternalCache(Context context) { if (isSdCardWritable()) { Log.i(TAG, "Cleaning up cache from external storage"); File externalDir = getExternalCacheDir(context); if (externalDir != null) { File[] externalFiles = externalDir.listFiles(); if (externalFiles != null && externalFiles.length > 0) { for (File file : externalFiles) { if (System.currentTimeMillis() - file.lastModified() >= CACHE_FILE_EXPIRATION && !NOMEDIA_FILENAME.equals(file.getName())) { Log.d(TAG, "Deleting " + file.getPath()); file.delete(); } } } } } else { Log.w(TAG, "Sdcard not writable while cleaning cache "); } } /** * Returns whether the SD card is available and writable */ public static boolean isSdCardWritable() { return Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState()); } public static File getExternalCacheDir(Context context) { return getExternalStorageDir(context, "/cache"); } /** We are supposed to check before this method if the sdcard is available */ private static File getExternalStorageDir(Context context, String dir) { if (dir != null) { File extMediaDir = new File( Environment.getExternalStorageDirectory() + "/Android/data/" + context.getPackageName() + dir); if (extMediaDir.exists()) { createNomediaDotFile(context, extMediaDir); return extMediaDir; } if (isSdCardWritable()) { extMediaDir.mkdirs(); createNomediaDotFile(context, extMediaDir); return extMediaDir; } else { Log.e(TAG, "SD card not writeable, unable to create directory: " + extMediaDir.getPath()); } } return null; } private static void createNomediaDotFile(Context context, File directory) { if (directory != null && isSdCardWritable()) { File nomedia = new File(directory, NOMEDIA_FILENAME); if (nomedia != null && !nomedia.exists()) { try { nomedia.mkdirs(); nomedia.createNewFile(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "unable to create .nomedia file in " + directory.getPath(), e); } } } } }