Eliminar caché del sistema en android 6.0

Estoy usando el método freeStorageAndNotify() con el permiso android.permission.CLEAR_APP_CACHE para eliminar la caché del sistema de todas las aplicaciones instaladas. Sin embargo, el método comenzó a lanzar InvocationTargetException de android marshmallow versión 6.0. Después de googlear los problemas que encontré el mismo problema se informa aquí: Android M método de reflexión freeStorageAndNotify excepción Así que aquí la conclusión fue, freeStorageAndNotify() dejó de trabajar desde google ha planteado el nivel de la firma del método ahora a la firma del sistema.

Pero ahora la pregunta es cómo otras aplicaciones de terceros como 'Clean Master' todavía son capaces de eliminar la caché del sistema de todas las aplicaciones instaladas mediante la adopción de permisos de accesibilidad de los usuarios para los dispositivos 6.0?

El limpiador del sistema que estoy usando tiene acceso a los permisos de ALMACENAMIENTO. Este permiso otorga a la autoridad de la aplicación autorización para borrar cualquier dato del directorio de almacenamiento externo compartido.

http://developer.android.com/reference/android/Manifest.permission_group.html#STORAGE

No creo que ninguna aplicación de terceros en realidad puede borrar la memoria caché del sistema a menos que el dispositivo esté enraizado y la aplicación está diseñada para dispositivos con raíces.

Permiso de maestro limpio

Maestro limpio pidiendo permiso

No creo que 'Clean Master' utilice permisos de accesibilidad para limpiar la caché de aplicaciones instaladas. Pero, si está interesado, este objetivo se puede lograr utilizando AccessibilityService en su aplicación. Dentro de su clase que extiende AccessibilityService tiene esta devolución de llamada:

  @Override public void onAccessibilityEvent(AccessibilityEvent aEvent) { AccessibilityNodeInfo rootNode = aEvent.getSource(); //... } 

Aquí puede invocar rootNode.findAccessibilityNodeInfosByViewId() o rootNode.findAccessibilityNodeInfosByText() , devolverá todos los objetos AccessibilityNodeInfo (sub-nodos) que coincidan en el árbol. Entonces, sólo tiene que detectar cuál de ellos es Button ( node.getClassName() ) y llamar a subNode.performAction(AccessibilityNodeInfo.ACTION_CLICK) .

En Android M, primero debes abrir la pantalla de App Info la App Info del sistema (puedes encontrar instrucciones aquí) ¿Cómo puedo iniciar la pantalla de información de aplicaciones de Android de forma programática? ) Para la aplicación concreta y, mediante el esquema descrito anteriormente, realizar clics secuenciales en los botones " Almacenamiento "->" Borrar caché ".

Para limpiar el caché de todas las aplicaciones instaladas, es probable que tenga que iterar a través de todas las aplicaciones instaladas ( List<ApplicationInfo> installedApplications = context.getPackageManager.getInstalledApplications(0); ) y repetir el procedimiento mencionado anteriormente.

Esas aplicaciones sólo hacen lo mismo todo el tiempo. Utilizarlo en un dispositivo antiguo y un nuevo dispositivo los resultados son los mismos. La única ayuda que he visto es que pueden matar o reiniciar algunos procesos de fondo, no para limpiar la caché. Por lo tanto, ninguna API puede restringir su truco ..

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.