Intereting Posts
Does System.currentTimeMillis () возвращает время UTC? Андроидная камера растянута в ландшафтном режиме Библиотека поддержки проектирования – какая версия для использования с SDK v21 Как отправить событие из службы на активность с помощью шины событий Otto? DrawerLayout Double Drawer (левый и правый ящики одновременно) Значок элемента ящика навигации, не отображающий исходный цвет Eclipse не генерирует MainActivity.java & activity_main.xml Какова цель startManagingCursor? MD5 хеширование в Android Есть ли в андроиде прослушиватель по умолчанию (на устройстве) по умолчанию? Правильны ли пользовательские интерфейсы дизайна значков все еще действительны? Как изменить программный цвет курсора Edittext в Android? ListView внутри ScrollView не прокручивается на Android «Требуется миграция области», исключение в андроиде при извлечении значений из realm db Как я могу предотвратить дикую прокрутку, когда поле формы ввода фиксированной позиции получает фокус?

Четкое отображение данных приложения

Я хочу программно очистить данные приложения.

Данные приложения могут содержать любые базы данных, общие настройки, внутренние-внешние файлы или любые другие файлы, созданные в приложении.

Я знаю, что мы можем очищать данные в мобильном устройстве через:

Настройки-> Приложения-> ManageApplications-> My_application-> Очистить данные

Но мне нужно сделать что-то в программе Android?

Заранее спасибо…

Solutions Collecting From Web of "Четкое отображение данных приложения"

Я просто помещаю учебник из ссылки ihrupin, размещенной здесь в этом сообщении.

package com.hrupin.cleaner; import java.io.File; import android.app.Application; import android.util.Log; public class MyApplication extends Application { private static MyApplication instance; @Override public void onCreate() { super.onCreate(); instance = this; } public static MyApplication getInstance() { return instance; } public void clearApplicationData() { File cacheDirectory = getCacheDir(); File applicationDirectory = new File(cacheDirectory.getParent()); if (applicationDirectory.exists()) { String[] fileNames = applicationDirectory.list(); for (String fileName : fileNames) { if (!fileName.equals("lib")) { deleteFile(new File(applicationDirectory, fileName)); } } } } public static boolean deleteFile(File file) { boolean deletedAll = true; if (file != null) { if (file.isDirectory()) { String[] children = file.list(); for (int i = 0; i < children.length; i++) { deletedAll = deleteFile(new File(file, children[i])) && deletedAll; } } else { deletedAll = file.delete(); } } return deletedAll; } } 

Поэтому, если вам нужна кнопка для этого, вам нужно вызвать MyApplication.getInstance (). ClearApplicationData () изнутри onClickListener

Обновление. Экземпляр sharedPreferences может храниться на ваших данных и воссоздавать файл настроек после его удаления. Таким образом, вы захотите получить свой объект SharedPreference и

 prefs.edit().clear().commit(); 

Обновить:

Вам нужно добавить android:name="your.package.MyApplication" в application tag внутри AndroidManifest.xml, если вы этого не сделали. Else, MyApplication.getInstance () возвращает значение null, в результате чего возникает исключение NullPointerException .

В API 19 (KitKat) появился новый API: ActivityManager.clearApplicationUserData () .

Я настоятельно рекомендую использовать его в новых приложениях:

 import android.os.Build.*; if (VERSION_CODES.KITKAT <= VERSION.SDK_INT) { ((ActivityManager)context.getSystemService(ACTIVITY_SERVICE)) .clearApplicationUserData(); // note: it has a return value! } else { // use old hacky way, which can be removed // once minSdkVersion goes above 19 in a few years. } 

Если вам не нужен хакерский способ, вы также можете скрыть кнопку в пользовательском интерфейсе, чтобы функциональность просто не была доступна на старых телефонах.

Знание этого метода является обязательным для тех, кто использует android:manageSpaceActivity .


Всякий раз, когда я использую это, я делаю это из manageSpaceActivity которого есть android:process=":manager" . Там я вручную убиваю любые другие процессы моего приложения. Это позволяет мне разрешить запуск пользовательского интерфейса и позволить пользователю решить, куда идти дальше.

 private static void killProcessesAround(Activity activity) throws NameNotFoundException { ActivityManager am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE); String myProcessPrefix = activity.getApplicationInfo().processName; String myProcessName = activity.getPackageManager().getActivityInfo(activity.getComponentName(), 0).processName; for (ActivityManager.RunningAppProcessInfo proc : am.getRunningAppProcesses()) { if (proc.processName.startsWith(myProcessPrefix) && !proc.processName.equals(myProcessName)) { android.os.Process.killProcess(proc.pid); } } } 

Самый простой способ сделать это

 private void deleteAppData() { try { // clearing app data String packageName = getApplicationContext().getPackageName(); Runtime runtime = Runtime.getRuntime(); runtime.exec("pm clear "+packageName); } catch (Exception e) { e.printStackTrace(); } } 

Это очистит данные и удалит ваше приложение из памяти. Это эквивалентно четкому параметру данных в разделе «Настройки» -> «Диспетчер приложений» -> «Ваше приложение» -> «Очистить данные»

Если вам нужен менее сложный взлом:

 void deleteDirectory(String path) { Runtime.getRuntime().exec(String.format("rm -rf %s", path)); } 

То, что я использую везде:

 Runtime.getRuntime.exec("pm clear me.myapp"); 

Выполнение над фрагментом кода закрывает приложение и удаляет все базы данных и общие настройки