Android:卸载时是否从外部存储中删除应用程序关联文件?

Android:卸载时是否从外部存储中删除应用程序关联文件?,android,storage,external,uninstallation,Android,Storage,External,Uninstallation,如果我正在编写的应用程序将一些文件永久存储到外部存储中(因此它们在应用程序退出[销毁]后仍然存在),这会很方便,但在卸载时,我想做一件体面的事情,删除这些文件以释放存储空间 有没有办法在卸载时删除这些文件 如果没有(我对此表示怀疑),那么每次我都必须创建这些文件。我试图通过让它们永久存在来节省启动时间和占用所需空间 注意:我需要使用外部存储,所以内部存储或数据库都不合适。不,我不这么认为。卸载应用程序时(或者如果用户按下应用程序设置应用程序中的“清除数据”按钮),将仅删除写入内部存储的文件 您的

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

有没有办法在卸载时删除这些文件

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


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

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


您的应用程序也无法接收其自己的
程序包\u REMOVED
广播意图,因此您基本上没有被卸载的通知。

实际上这是可能的

android将自动删除外部存储中的应用程序文件,但文件必须位于应用程序的特定路径内:

“..../Android/data/APP\u PACKAGE\u NAME/”

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

“..../Android/obb/APP_-PACKAGE_-NAME/” 其中APP_PACKAGE_NAME是应用程序的包名

数据是你想要的任何东西。
obb文件夹用于存储使用play store和下载的大型文件。您不应该在那里创建文件。

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

File dir = getExternalFilesDir(null);
这将在/Android/data/your.package/创建一个文件夹。请注意,这并不像SD卡中那样是外部的,但可以公开访问。如果用户卸载您的应用程序,此目录及其所有内容也将被删除

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

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

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

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


只是澄清一下,你不能在你的应用程序中创建一个广播接收器来监听这个?你可以创建一个广播接收器来监听系统发送的任何
包*
事件,但你不会为你自己的应用程序收到它们,除非你的应用程序正在升级——你会被删除
PACKAGE\u
,然后很快被替换为
PACKAGE\u
。我遇到过这样一个应用程序,在卸载apk后,它会保留持久数据,并且删除来自../Android/data/APP的数据。此外,具有应用程序名称的任何位置都已被删除,但仍有一些应用程序创建的残余文件仍在系统中。我只是想知道它可能藏在哪里?我不明白。你能再解释一下吗?@androiddeveloper你如何应用这个
/Android/data/APP\u PACKAGE\u NAME/
?在我当前的应用程序中,我使用的是
Environment.getExternalStorageDirectory().getPath()+“/SAMPLE/”
它在卸载过程中不会被删除。@Compaqle202x您是否有可能在旧设备/操作系统上卸载该应用程序?我记得我看到一些设备有这个问题。@androiddeveloper我恐怕没有,我的应用程序目标设备运行在4.0及更高版本上。我很确定使用
getExternalStorageDirectory()
不会删除它创建的文件,只有那些带有
/Android/data/APP\u PACKAGE\u NAME/
的文件,我只是不知道如何应用它。。