Android:彻底清除APP数据的几种方案总结

时间:2025-02-09 08:29:18
public void use(){ //使用 clearPublic(); clearPublic(); restartApp(); } public static void restartApp() { Activity activity = getActivity(); final Intent intent = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName()); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(intent); } //杀掉以前进程 android.os.Process.killProcess(android.os.Process.myPid()); } /** * 清空公有目录 */ public static void clearPublic() { if (ApplicationManager.getApplication() == null) { throw new RuntimeException("App no init"); } String publicFilePath = Environment.getExternalStorageDirectory().getPath() + "/" + getPackageInfo().packageName; File dir = new File(publicFilePath); File[] files = dir.listFiles(); if (null != files) { for (File file : files) { deleteFolder(file.getAbsolutePath()); } } } /** * 清空私有目录 */ public static void clearPrivate() { if (ApplicationManager.getApplication() == null) { throw new RuntimeException("App no init"); } //清空文件夹 File dir = new File(ApplicationManager.getApplication().getFilesDir().getParent()); File[] files = dir.listFiles(); if (null != files) { for (File file : files) { if (!file.getName().contains("lib")) { deleteFolder(file.getAbsolutePath()); } } } } /** * 删除指定文件 */ private static boolean deleteDirectory(String filePath) { boolean flag = false; if (!filePath.endsWith(File.separator)) { filePath = filePath + File.separator; } File dirFile = new File(filePath); if (!dirFile.exists() || !dirFile.isDirectory()) { return false; } flag = true; File[] files = dirFile.listFiles(); for (File file : files) { if (file.isFile()) { flag = deleteSingleFile(file.getAbsolutePath()); if (!flag) { break; } } else { flag = deleteDirectory(file.getAbsolutePath()); if (!flag) { break; } } } if (!flag) { return false; } return dirFile.delete(); } /** * 删除单个文件 * * @param filePath 被删除文件的文件名 * @return 文件删除成功返回true,否则返回false */ private static boolean deleteSingleFile(String filePath) { File file = new File(filePath); if (file.isFile() && file.exists()) { return file.delete(); } return false; } /** * 根据路径删除指定的目录或文件,无论存在与否 */ private static boolean deleteFolder(String filePath) { File file = new File(filePath); if (!file.exists()) { return false; } else { if (file.isFile()) { return deleteSingleFile(filePath); } else { return deleteDirectory(filePath); } } } /** * 获取包信息 */ private static PackageInfo getPackageInfo() { PackageManager packageManager = ApplicationManager.getApplication().getPackageManager(); PackageInfo packInfo = null; try { packInfo = packageManager.getPackageInfo(ApplicationManager.getApplication().getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return packInfo; }