纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

pumpkin的玄学   2021-11-19 我要评论
想了解Android彻底清除APP数据的两种方案总结的相关内容吗pumpkin的玄学在本文为您仔细讲解Android彻底清除APP数据的相关知识和一些Code实例欢迎阅读和指正我们先划重点:android清除app数据,清除手机app数据,安卓清除数据下面大家一起来学习吧

用途

用于APP内部的重置功能实现

方案一:利用命令行pm clear 包名系统级别清除App数据

优点

和任务管理器里面清除所有数据的操作一致会删除所有的APP数据重新进入APP还需重新申请权限

缺点

系统会直接杀掉APP进程无法进行拉起APP的操作

代码

    public static Process clearAppUserData(String packageName) {
        Process p = execRuntimeProcess("pm clear " + packageName);
        return p;
    }

    public static  Process execRuntimeProcess(String commond) {
        Process p = null;
        try {
            p = Runtime.getRuntime().exec(commond);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return p;
    }

方案二:手动删除内部储存和外部储存

优点

由自身控制可以重新拉起APP

缺点

1.没有系统级的清除那么彻底比如重新拉起后不需要重新申请权限当然数据库SharePreferences相关的通通都会删掉的

2.因为数据库文件被删除所以重新拉起启动页时需要删除当前进程此时会黑屏一下

代码

注意:说明一点下面代码中的ApplicationManager.getApplication()其实是获取了当前app的Application对象也可以替换成context

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

总结


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式