¿Limpiar la caché de la aplicación mediante programación?

Quiero escribir una utilidad en la que el usuario puede seleccionar un conjunto de aplicaciones instaladas y borrar sus cachés de datos, como por ejemplo la forma en que puede hacerlo manualmente mediante la pantalla de Configuración-> Aplicaciones integrada con el botón "Borrar caché".

¿Cómo puedo acceder a la cantidad de datos almacenados en caché que cada aplicación tiene y borrar mediante programación estos cachés?

Las aplicaciones ordinarias de SDK no tienen derechos de acceso, y mucho menos de modificar, las cachés de otras aplicaciones, como tampoco tienen derecho a hackear sus archivos.

Esto puede ser posible en teléfonos con raíces con la aplicación ejecutándose como root, en cuyo caso tendrá que construir manualmente las rutas basadas en los nombres de los paquetes de las aplicaciones.

La respuesta dada aquí es falsa, hay aplicaciones del mercado que tienen un programación clara de la funcionalidad de caché de todas las aplicaciones. Además, lo siguiente está en la documentación:

public static final String CLEAR_APP_CACHE 

Desde: API Nivel 1 en android Permite que una aplicación borre las cachés de todas las aplicaciones instaladas en el dispositivo. Valor constante:

  android.permission.CLEAR_APP_CACHE 

Tenga en cuenta la "parte de todas las aplicaciones instaladas", y el hecho de que no necesita ningún acceso root o permisos especiales más allá de un permiso de usuario estándar.

Puedo publicar aquí porque tengo un requisito en una entrega para borrar todos los cachés de la aplicación cada 24 horas en un teléfono de demostración de la tienda y estoy tratando de averiguar cómo usar esto correctamente. Sé que parte de la solución es obtener este permiso, también sé cómo encontrar todas las aplicaciones instaladas en el dispositivo, y estoy trabajando en ser capaz de eliminar realmente el caché. Mi problema es que otros cachés de aplicaciones no contengan archivos (a pesar de tener contenido), sospecho que no tengo acceso de lectura para hacer la lista de archivos llamada.

Debería tener este permiso en su manifiesto:

 <uses-permission android:name="android.permission.CLEAR_APP_CACHE"/> 

Después de eso, puede usar PackageManager para borrar el caché de todo el programa:

 PackageManager pm = getPackageManager(); // Get all methods on the PackageManager Method[] methods = pm.getClass().getDeclaredMethods(); for (Method m : methods) { if (m.getName().equals("freeStorage")) { // Found the method I want to use try { long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space m.invoke(pm, desiredFreeStorage , null); } catch (Exception e) { // Method invocation failed. Could be a permission problem } break; } } 

Esto solicita que Android limpie los archivos de caché lo suficiente para que haya 8 GB libres. Si estableces este número lo suficientemente alto, debes lograr lo que quieres (que Android eliminará todos los archivos de la caché). Cuando llama a freeStorage () comprueba si la cantidad de almacenamiento (en este caso 8 GB) está disponible para los archivos de caché. Si no, empieza a eliminar archivos de los directorios de caché de la aplicación, eliminando primero los archivos más antiguos. Sigue eliminando archivos hasta que ya no haya más archivos que eliminar, o ha liberado la cantidad de almacenamiento que solicitó (en este caso 8 GB).

  • MongoDB: ¿Cómo diseñar seguidores estilo twitter / siguiente modelo de relación en MongoDB?
  • Necesita ayuda con el selector de colores para los elementos de ListView seleccionados
  • ¿Tiene crashlytics una API pública?
  • ¿Cómo manejas los registros de antememoria de caché en la aplicación para móviles
  • Javascript máximo altura de la vista tras la orientación cambiar Android y iOS
  • El elemento que ha solicitado no está disponible para su compra: facturación en la aplicación
  • No se eliminan las cookies del navegador móvil (cromo, safari) en la sesión de cierre
  • Abra la aplicación google maps desde un navegador con la ubicación de inicio predeterminada en android y iphone
  • Flurry Analytics vs Google Analytics en la plataforma móvil
  • Google Play: ¿actualiza una aplicación no publicada para los usuarios existentes, pero no para los nuevos usuarios?
  • Fuente RSS de Google Play Store
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.