【问题标题】:Accessing files from external SD card memory从外部 SD 卡存储器访问文件
【发布时间】:2014-11-20 11:36:11
【问题描述】:

我对 Android 生态系统非常陌生。我能否得出一个明确的结论,即任何应用程序都可以读取外部 SD 存储器中存储的任何文件?

注意虽然 getExternalFilesDir() 和 getExternalFilesDirs() 提供的目录不能被 MediaStore 内容提供程序访问,但其他具有 READ_EXTERNAL_STORAGE 权限的应用程序可以访问外部存储上的所有文件,包括这些文件。如果您需要完全限制对文件的访问,则应改为将文件写入内部存储。 (http://developer.android.com/guide/topics/data/data-storage.html#filesExternal)

【问题讨论】:

  • 外置SD会被格式化为FAT16/FAT32,绝对没有权限。例如是的,任何人都可以在外部卡上读/写任何他们想要的东西。

标签: android


【解决方案1】:

是的,您可以,但是如果您在 KitKat OS 及更高版本上部署应用程序,您需要了解一条重要信息。您不能再像以前那样在 SD 卡/内部存储中的任何位置进行写入。公共目录仍然可以写入(下载、图片、视频等),但仅此而已。您可以为您的应用程序写入私有存储,而您的应用程序只能从中读取,但是如果您正在浏览 sdCard 的内容,您将无法查看该位置或文件。唯一的例外是您的手机已被植根。

http://www.androidcentral.com/kitkat-sdcard-changes

写入应用私有存储的示例:

//Write to internal app storage
            FileOutputStream internalStorage = null;

        try
        {
            internalStorage = openFileOutput("capturedImage", Context.MODE_PRIVATE);

        } 
        catch (FileNotFoundException e1)
        {
            e1.printStackTrace();
        }

        BufferedOutputStream buffer_output = new BufferedOutputStream(internalStorage);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, buffer_output);
        try
        {
            buffer_output.flush();
            buffer_output.close();
        }
        catch (IOException e)
        {

            e.printStackTrace();
        }

【讨论】:

  • 我对此有点困惑:“您不能再像以前那样在 SD 卡/内部存储中的任何位置写入。”。使用 SD 卡,您是否暗示有外部 SD 卡?
  • 那么,使用 KitKat 操作系统及以上版本,任何应用程序都可以读取外部 SD 卡上的任何文件吗?
  • 摘自:“保存应用程序私有的文件应该通过调用 getExternalFilesDir() 在外部存储上使用私有存储目录​​。“这似乎与我的其他摘录相矛盾。
  • 抱歉,我会尽量清楚一点。是的,我指的是外部 SD 卡。在从外部 SD 卡上的文件读取方面,任何应用程序都应该能够读取这些文件,只要它们在其 Android 清单 xml 文件中具有读取权限(developer.android.com/reference/android/…)我并不是要通过提及来混淆您私人存储和奇巧。如果您决定将来开始写入外部存储,只是我提供更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多