当用户选择在android中卸载我的应用程序时如何删除文件夹

时间:2011-04-20 04:50:58

标签: android uninstall

我想了解一旦用户为我的应用程序选择卸载按钮后如何删除文件夹。 我想通过编程方式有机会做到这一点...... 如果是这样,请让我知道可能的解决方案。 提前谢谢。

2 个答案:

答案 0 :(得分:9)

如果您在设备的外部存储设备上创建了任何文件夹...当用户卸载您的应用时,您无法调用代码。某些内容会自动删除(数据库,任何写入内部存储的内容),但不会删除外部存储上的文件夹。

编辑 - 正如Stephan所指出的,如果您的目标是API级别8或更高级别,您可以将Context.getExternalFilesDir()用于外部文件,这些文件将在卸载时删除。

答案 1 :(得分:0)

这是个主意。如果您担心在卸载过程中未删除的文件将在以后如this question中重新安装您的应用时使用户的入职过程混乱,那么您只需确保删除所有数据即可目前,您的应用已重新安装(或仅为此安装)。这是“如果穆罕默德不去那座山,那座山就会去穆罕默德”。显然,您必须在共享首选项中设置一个标志,以便删除删除ExternalStorageDir内容的过程仅在用户与您的应用进行首次交互之前执行一次,这里是一些示例代码:

SharedPreferences sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstInteraction = sharedPreferences.getBoolean("isFirstUsage", true);
if(isFirstInteraction){
    trimCache(this);
    SharedPreferences.Editor editor=sharedPreferences.edit();
    editor.putBoolean("isFirstUsage",false);
    editor.apply();
}
//delete files from external files dir
public static void trimStorage(Context context) {
    try {
        File dir = context.getExternalFilesDir();
        if (dir != null && dir.isDirectory()) {
            deleteDir(dir);

        }
    } catch (Exception e) {
        e.printStackTrace();

    }
}

public static boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                Log.d("deletion","failed at "+children[i]);
                return false;
            }
        }
    }

    // The directory is now empty so delete it
    return dir.delete();
}