Android: ¿borrar la caché de todas las aplicaciones?

En una aplicación para Android que estoy creando, quiero poder borrar de forma programática el caché de todas las aplicaciones en el dispositivo. Esto se ha preguntado muchas veces antes: ¿ Borrar el caché de la aplicación mediante progtwigción? Reflejar métodos para borrar la caché de aplicaciones de Android Borre otra caché de aplicaciones y todos dicen que no es posible sin la raíz.

Como sea, este no es el caso. Si observa las aplicaciones App Cache Cleaner, History Eraser, 1Tap Cleaner, Easy History Cleaner e innumerables otras aplicaciones similares en Google Play (todas las cuales no requieren root), se dará cuenta de que todas pueden hacer esto. Por lo tanto, ES posible hacerlo, pero simplemente no puedo encontrar ejemplos públicos de cómo hacer esto.

¿Alguien sabe lo que están haciendo todas esas aplicaciones?

Gracias

Esta es una forma de hacerlo que no requiere IPackageDataObserver.aidl :

 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; } } 

Necesitarás tener esto en tu manifiesto:

  

Esto solicita que Android borre suficientes archivos de caché para que haya 8 GB gratis. Si configura este número lo suficientemente alto, debe lograr lo que desea (que Android borrará todos los archivos en la caché).

La forma en que esto funciona es que Android mantiene una lista LRU (por lo menos usada recientemente) lista de todos los archivos en todos los directorios de caché de la aplicación. Cuando llama a freeStorage() comprueba si la cantidad de almacenamiento (en este caso 8 GB) está disponible para los archivos de caché. De lo contrario, comienza a eliminar archivos de los directorios de caché de la aplicación eliminando primero los archivos más antiguos . Continúa eliminando archivos hasta que ya no haya archivos para eliminar o haya liberado la cantidad de almacenamiento que solicitó (en este caso 8 GB).

Puede borrar los datos de todas las aplicaciones utilizando este método (freeStorageAndNotify). Tienes que acceder a este método usando la reflexión de Java. Necesitará IPackageDataObserver.aidl para ello. también necesita tener permiso en su archivo de manifiesto para eliminar el caché