Intereting Posts
Android edittext background image начало курсора RecyclerView onBindViewHolder вызывается только при изменении getItemViewType Много GC при прокрутке ListView (с шаблоном держателя) Не удается создать или отредактировать виртуальные устройства Android (AVD) от Eclipse, ADT 22.6 Android ResultReceiver через пакеты Android. Установка ширины TextView слева или кнопки-1 или кнопки-2. Наложение наложения (наклейка тренера). Нужна помощь в перемещении взгляда, основанного на позиции другого Как отобразить мое местоположение на Google Maps для Android API v2 Предварительный просмотр камеры с помощью двойного пальца Каков наилучший способ общения между сервисом и деятельностью? Как я могу использовать один и тот же набор экранов предпочтений для всех версий Android от 2.X до 4.X? PopupWindow z ordering Скользящее меню не открывается при прокрутке Android: цифры Проблема Настройка основного пути Android в ионной структуре

Как удалить кеш других приложений из нашего приложения для Android?

Я пытаюсь разработать приложение для Android, которое может стереть другие данные кэша приложений, я пытался просматривать все блоги, но ни один из них не работал для меня, я могу очистить кеш приложения до следующего кода

File cache = getCacheDir(); File appDir = new File(cache.getParent()); if (appDir.exists()) { String[] children = appDir.list(); for (String s : children) { if (!s.equals("lib")) { deleteDir(new File(appDir, s)); Toast.makeText(DroidCleaner.this, "Cache Cleaned", Toast.LENGTH_LONG).show(); Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************"); } } } public static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } return dir.delete(); } 

Мой манифестный код

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

Я проверил код на 2.2, 2.3 и 4.0

И после просмотра сообщения в следующей ссылке Android: Очистить кеш всех приложений?

Я изменил свой код на

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

Я хочу очистить кэш других приложений, может ли любой орган, пожалуйста, помогите мне, пожалуйста, поправьте меня, если я ошибаюсь, спасибо заранее.

Этот API больше не поддерживается в API 23, то есть в Marshmallow. Разрешение устарело в Marshmallow.

Но есть еще один способ, задав разрешение на время загрузки для аксессуаров . Попробуйте приложение « Всё в одном» из игрового магазина. Это приложение может очищать кеши приложений даже в Marshmallow. Тогда мы должны сделать это.

Я изучаю это. Как только я найду решение, я обновлю ответ. Благодарю.


СТАРЫЙ ОТВЕТ ПОСЛЕДУЕТ


Я использовал следующий код, и теперь я могу очистить кеш всех приложений без укоренения, он отлично работает для меня,

 private static final long CACHE_APP = Long.MAX_VALUE; private CachePackageDataObserver mClearCacheObserver; btnCache.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearCache(); } });//End of btnCache Anonymous class void clearCache() { if (mClearCacheObserver == null) { mClearCacheObserver=new CachePackageDataObserver(); } PackageManager mPM=getPackageManager(); @SuppressWarnings("rawtypes") final Class[] classes= { Long.TYPE, IPackageDataObserver.class }; Long localLong=Long.valueOf(CACHE_APP); try { Method localMethod= mPM.getClass().getMethod("freeStorageAndNotify", classes); /* * Start of inner try-catch block */ try { localMethod.invoke(mPM, localLong, mClearCacheObserver); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * End of inner try-catch block */ } catch (NoSuchMethodException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }//End of clearCache() method private class CachePackageDataObserver extends IPackageDataObserver.Stub { public void onRemoveCompleted(String packageName, boolean succeeded) { }//End of onRemoveCompleted() method }//End of CachePackageDataObserver instance inner class 

А также создайте pacakge в своей папке src с именем android.content.pm внутри этого пакета, создайте файл с именем IPackageDataObserver.aidl и вставьте в него следующий код

 package android.content.pm; /** * API for package data change related callbacks from the Package Manager. * Some usage scenarios include deletion of cache directory, generate * statistics related to code, data, cache usage(TODO) * {@hide} */ oneway interface IPackageDataObserver { void onRemoveCompleted(in String packageName, boolean succeeded); } 

И в вашем манифесте убедитесь, что вы использовали следующий код

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

Если вы, ребята, находите какую-либо проблему, не стесняйтесь обращаться ко мне, спасибо.

Другая альтернатива – добавить файл layoutlib.jar, расположенный в каталоге \ sdk \ platform \ android-19 \ data , в библиотеку вашего проекта. Вы сможете решить этот и другие классы без необходимости вручную добавлять их в исходный код.

Я должен добавить, что эти классы не будут добавлены в ваш двоичный файл. Это позволит вам разрешить кланы.

Кэш – это не просто одно. Для каждого приложения есть папка с кешем в папках системных данных и одна папка с кешем для каждого доступного раздела хранения (один на внутренней SD-карте устройства, и если есть внешняя SD-карта, то там тоже есть)

Таким образом, чтобы очистить кеш в папках системных данных, вы делаете это

 Method method = pmClass.getDeclaredMethod("freeStorageAndNotify", new Class[] { Long.TYPE, Class.forName("android.content.pm.IPackageDataObserver") }); method.setAccessible(true); method.invoke(con.getPackageManager(), Long.MAX_MALUE, null); //null is for the IPackageDataObserver object that let's you know when the process is done and it is not necessary to provide. 

Поскольку у вас нет доступа к системным папкам, чтобы удалить их самостоятельно в ненастроенном устройстве, чтобы вы вежливо попросили Android сделать это за вас.

Чтобы очистить кеш в папках с несистемными данными, вы делаете это

 for(String storageVolumePath:storageVolumePaths) { File androidDataFolder = new File((String) storageVolumePath + "/Android/data/"); if (androidDataFolder.exists()) { File[] filesList = androidDataFolder.listFiles(); if (filesList != null) { for (File file : filesList) { if (file.isDirectory()) { file = new File(file.getAbsolutePath() + "/cache/"); if(file.exists()) { try { deleteFile(file); }catch (Exception e ){} } } } } } } 

Все в одной панели инструментов НЕ очищает кеш из системных папок данных в marshmellow, потому что это невозможно без доступа root. Он использует только второй метод и очищает часть общего кеша. Чтобы достичь этого в API 23 и выше без корневого доступа, вам необходимо быть системным приложением, потому что нет способа запросить разрешение android.permission.CLEAR_APP_CACHE с использованием API разрешений