通过编程清除应用程序的数据

我想以编程方式清除我的应用程序的数据。

应用程序的数据可能包含数据库,共享首选项,内部 – 外部文件或应用程序内创build的任何其他文件。

我知道我们可以通过以下方式清除移动设备中的数据:

设置 – >应用程序 – >pipe理应用程序 – >我的应用程序 – >清除数据

但是我需要通过Android程序来完成上述任务?

提前致谢…

我只是把链接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; } } 

所以,如果你想要一个button来做到这一点,你需要调用MyApplication.getInstance()。 来自onClickListener的clearApplicationData()

更新:您的sharedPreferences实例可能会保留您的数据,并在删除之后重新创build首选项文件。 所以你想要得到你的SharedPreference对象和

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

更新:

如果你还没有这样做,你需要在AndroidManifest.xml里面的application tag添加android:name="your.package.MyApplication" 。 否则,MyApplication.getInstance()返回null,导致NullPointerException

API 19(KitKat)中引入了一个新的API: ActivityManager.clearApplicationUserData() 。

我强烈build议在新的应用程序中使用它:

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

如果你不想要这种黑客方式,你也可以隐藏UI上的button,这样旧function就不能使用了。

对于使用android:manageSpaceActivity人来说,这个方法的知识是强制性的。


每当我使用这个,我从一个具有android:process=":manager"manageSpaceActivity这样做。 在那里,我手动杀了我的应用程序的任何其他进程。 这使我可以让用户界面继续运行,并让用户决定下一步去哪里。

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

这将清除数据并从内存中删除您的应用程序。 这相当于在设置 – >应用程序pipe理器 – >您的应用程序 – >清除数据下清除数据选项

如果你想要一个不太冗长的黑客攻击:

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

我到处使用的是:

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

执行上面的一段代码closures应用程序并删除所有数据库和共享首选项