Удалить системный кеш на android 6.0
Я использую метод freeStorageAndNotify()
с разрешением android.permission.CLEAR_APP_CACHE
для удаления системного кеша всех установленных приложений. Но метод начал бросать InvocationTargetException
из версии 6.0 андроидного зефира.
После поиска проблем, которые я нашел, здесь сообщается одна и та же проблема:
Метод отражения Android M freeStorageAndNotify исключение
Итак, вот вывод: freeStorageAndNotify()
перестало работать, так как Google теперь повысил уровень сигнатуры метода до сигнатуры | system.
Но теперь вопрос заключается в том, как другие сторонние приложения, такие как "Чистый мастер", все еще могут удалять системный кеш всех установленных приложений, принимая разрешения на доступ для пользователя для 6.0 устройств?
Ответы
Ответ 1
Очиститель системы, который я использую, имеет доступ к разрешениям STORAGE. Это разрешение предоставляет полномочиям приложения очищать любые данные в общем хранилище внешних хранилищ.
http://developer.android.com/reference/android/Manifest.permission_group.html#STORAGE
Я не думаю, что какое-либо стороннее приложение может на самом деле очистить системный кеш, если устройство не внедрено, а приложение предназначено для корневых устройств.
![clean Master permission]()
![clean Master asking for permission]()
Ответ 2
Я не думаю, что "Чистый мастер" фактически использует разрешения доступности для очистки установленного кеша приложений.
Но, если вам интересно, эту цель можно достичь, используя AccessibilityService
в вашем приложении.
В вашем классе, который расширяет AccessibilityService
, у вас есть этот обратный вызов:
@Override
public void onAccessibilityEvent(AccessibilityEvent aEvent) {
AccessibilityNodeInfo rootNode = aEvent.getSource();
//...
}
Здесь вы можете ссылаться
rootNode.findAccessibilityNodeInfosByViewId()
или
rootNode.findAccessibilityNodeInfosByText()
он вернет все соответствующие объекты AccessibilityNodeInfo
(под-узлы) в дереве. Затем вам нужно просто определить, какая из них Button
(node.getClassName()
) и вызвать subNode.performAction(AccessibilityNodeInfo.ACTION_CLICK)
.
На Android M вам сначала нужно открыть системный экран App Info
(здесь вы можете найти инструкции Как я могу запустить программный экран приложения для Android по умолчанию?) для конкретное приложение и, по описанной выше схеме, выполните последовательные щелчки на кнопках "Хранение" → "Очистить кеш".
Чтобы очистить кеш для всех установленных приложений, вам, вероятно, придется перебирать все установленные приложения (List<ApplicationInfo> installedApplications = context.getPackageManager.getInstalledApplications(0);
)
и повторите описанную выше процедуру.
Ответ 3
эти приложения все время делают одно и то же. использовать его на старом устройстве и новом устройстве, результаты одинаковы. единственная помощь, которую я видел, - это то, что они могут убить или перезапустить некоторые фоновые процессы, а не очищать кеш. поэтому API не может ограничить свой трюк.