【问题标题】:Android: Delete app associated files from external storage on Uninstall?Android:在卸载时从外部存储中删除应用相关文件?
【发布时间】:2010-12-31 16:30:56
【问题描述】:

如果我正在编写的应用程序将一些文件永久存储到外部存储中会很方便(因此它们在应用程序退出后仍然存在[销毁]),但在卸载时我想做体面的事情并删除这些文件以释放存储空间。

有什么方法可以在卸载时删除这些文件?

如果没有(我对此表示怀疑),那么我每次都必须创建这些文件。我试图通过让它们永久存在来节省启动时间并占用所需的空间。

注意:我需要使用外部存储,因此内部存储或数据库都不合适。

【问题讨论】:

    标签: android storage external uninstallation


    【解决方案1】:

    其实是可以的。

    android会自动移除应用在外部存储中的文件,但文件必须在应用的特定路径内:

    "...../Android/data/APP_PACKAGE_NAME/"

    其中 APP_PACKAGE_NAME 是应用程序的包名称。 另一个自动清空的路径是:

    "...../Android/obb/APP_PACKAGE_NAME/" 其中 APP_PACKAGE_NAME 是应用程序的包名。

    数据可以满足您的任何需求。 obb 文件夹用于存放使用 play-store 和 apk extension library 下载的大文件。你不应该在那里创建文件。

    【讨论】:

    • 我遇到了一个应用程序,其持久性数据在卸载 apk 后仍然存在,并且来自 ../Android/data/APP 的数据被删除。另外,APP名称的任何地方都被删除了,但系统中仍有一些APP创建的残留文件。我只是想知道它可能藏在哪里?
    • 我不明白。你能再解释一下吗?
    • @androiddeveloper 你如何应用这个/Android/data/APP_PACKAGE_NAME/?在我当前的应用程序中,我使用的是Environment.getExternalStorageDirectory().getPath() + "/SAMPLE/",它在卸载过程中不会被删除。
    • @CompaqLE2202x 您是否有机会在旧设备/操作系统上卸载该应用程序?我记得我看到一些有这个问题的设备。
    • @androiddeveloper 恐怕不是,我的应用目标设备运行在 4.0 及更高版本上。我很确定使用getExternalStorageDirectory() 不会删除它创建的文件,只有/Android/data/APP_PACKAGE_NAME/ 的文件,我只是不知道如何应用它..
    【解决方案2】:

    不,我不这么认为。当您的应用程序被卸载时(或者如果用户在应用程序设置应用程序中按下“清除数据”按钮),只有您写入内部存储的文件才会被删除。

    您的应用也无法接收自己的 PACKAGE_REMOVED 广播意图,因此您基本上不会收到有关您被卸载的通知。

    【讨论】:

    • 澄清一下,您不能在应用程序中创建一个广播接收器来监听这个?
    • 您可以创建一个广播接收器来侦听系统发送的任何PACKAGE_* 事件,但您自己的应用程序不会收到它们除了正在升级——您将获得PACKAGE_REMOVED,紧随其后的是PACKAGE_REPLACED
    【解决方案3】:

    是的,这是可能的。只需将文件写入外部文件目录:

    File dir = getExternalFilesDir(null);
    

    这将在 /Android/data/your.package/ 处创建一个文件夹。请注意,这不像 sdcard 中的 External,但它是可公开访问的。如果用户卸载您的应用,该目录及其所有内容也将被删除。

    【讨论】:

      【解决方案4】:

      Quoting from the blog post of CommonsWare

      • 内部存储:您的文件已删除

      • 外部存储:如果您将文件写入以getExternalFilesDir()getExternalCacheDir() 为根的位置,则您的文件将被删除。如果您将文件写入其他地方(例如,Environment.getExternalStoragePublicDirectory()),您的文件不会被删除

      • 可移动存储,在 Android 4.4 之前:无法正式访问可移动存储;如果您的文件在那里结束,则不应在卸载您的应用时将其删除

      • 可移动存储,Android 4.4+:AFAIK,如果您写入支持的位置(getExternalFilesDirs()getExternalCacheDirs()),如果该特定的可移动存储位当时在设备中,您的文件将被删除卸载

      【讨论】:

        猜你喜欢
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        相关资源
        最近更新 更多