【问题标题】:How to save a file that is accessible to the user outside of the app and also deletes on app uninstall?如何保存用户可以在应用程序之外访问并在应用程序卸载时删除的文件?
【发布时间】:2016-03-24 07:56:25
【问题描述】:

应用要求:

  • 已保存的文件在库存设备的文件浏览器中可见。 (用于用户操作)
  • 卸载应用时会删除文件。

我遇到了这篇文章 (How can I let users access the internal storage directory of my app?),其中 OP 似乎想要与我相同的行为,并且似乎通过使用 getExternalFilesDir() [最后一篇文章] 解决了它,但是当我使用该方法时,我的文件不是对我的应用程序之外的用户可见。那么如何在我的应用程序中同时获得这两种功能呢?

externalDir = mContext.getExternalFilesDir(null);
File myDir = new File(externalDir.toString() + "/my_snapshots");
myDir.mkdirs()
String fname = "Image-" + n + ".jpg";
            File file = new File(myDir, fname);
FileOutputStream out = new FileOutputStream(file);

MediaScannerConnection.scanFile(mContext, new String[] { file.toString() }, null,
            new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });

【问题讨论】:

    标签: android


    【解决方案1】:

    似乎通过使用 getExternalFilesDir() 解决了它

    这是正确的解决方案。

    当我使用该方法时,我的文件在我的应用程序之外对用户不可见

    那是因为您没有使用MediaScannerConnection 及其scanFile() 方法对文件进行索引。一旦你这样做了,MTP 客户端和任何使用 MediaStore 的设备上的应用程序都会看到你的文件。

    【讨论】:

    • 糟糕,我忘了说我使用了scanFile()。而且我知道 scanFile() 有效,因为如果我将文件保存到内部公共,图像就会显示在图库中。
    • 添加了相关的伪代码,看看你是否能发现可能有问题的地方。
    • @shoota:我对scanFile() 和getExternalFilesDir() 没有任何问题,尽管它可能需要您在客户端进行“刷新”,或者拔下/重新插入-在设备中,让它拿起零钱。我的代码与您的代码的主要区别在于我使用getAbsolutePath() 而不是toString(),尽管在这种情况下我不确定是否有区别。这些文件将显示在外部存储上的Android/data/your.application.id.here/files/ 中(由于谷歌的愚蠢,在桌面文件浏览器中通常称为“内部存储”)。
    • 我可以在Android/data/com.my_company/my_snapshots 下使用 AFT 查看我的文件,所以我们知道它在那里,但为什么它没有显示在三星的“我的文件”应用程序下?
    • @shoota:因为我不知道三星的“我的文件”应用程序是什么,所以我无法回答。请记住,许多设备没有“库存设备的文件浏览器”,并且此类应用的行为可能会有很大差异。
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2012-02-28
    • 2011-12-11
    • 2016-05-03
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多