微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决以编程方式清除应用程序的数据

| 我想以编程方式清除应用程序的数据。 应用程序的数据可能包含数据库,共享首选项,内部-外部文件或在应用程序内创建的任何其他文件之类的内容。 我知道我们可以通过以下方式清除移动设备中的数据:   设置->应用程序->管理应用程序->我的应用程序->清除   数据 但是我需要通过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;
    }
}
因此,如果您想要一个按钮来执行此操作,则需要调用MyApplication.getInstance()。从onClickListener内部的clearApplicationData() 更新: 您的“ 1”实例可能会保留您的数据,并在删除后重新创建首选项文件。因此,您想要获取your1ѭ对象并
prefs.edit().clear().commit();
更新: 如果尚未在AndroidManifest.xml中的
application tag
中添加
android:name=\"your.package.MyApplication\"
,则需要这样做。否则,
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.
}
如果您不希望采用这种骇人听闻的方式,还可以在UI上隐藏该按钮,以便该功能仅在旧手机上不可用。 使用using9ѭ的任何人都必须了解此方法。 每当我使用它时,我都会从带有ѭ11的ѭ10中使用。在这里,我手动终止了我应用程序的所有其他进程。这使我可以让UI保持运行状态,并让用户决定下一步。
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);
        }
    }
}
    ,结合2个答案中的代码: https://stackoverflow.com/a/42228794/1815624 https://stackoverflow.com/a/29197259/1815624 这是基于合并源的结果答案
private void clearAppData() {
    try {
        // clearing app data
        if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) {
            ((ActivityManager)getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData(); // note: it has a return value!
        } else {
            String packageName = getApplicationContext().getPackageName();
            Runtime runtime = Runtime.getRuntime();
            runtime.exec(\"pm clear \"+packageName);
        }

    } catch (Exception e) {
        e.printStackTrace();
    } 
}
    ,最简单的方法是
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();
} }
这将清除数据并从内存中删除您的应用程序。等同于下的清除数据选项 设置->应用程序管理器->您的应用程序->清除数据     ,我到处都用:
 Runtime.getRuntime().exec(\"pm clear me.myapp\");
  执行上面的代码将关闭应用程序,并删除所有数据库和共享首选项     ,如果您想减少冗长的hack:
void deleteDirectory(String path) {
  Runtime.getRuntime().exec(String.format(\"rm -rf %s\",path));
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。