【问题标题】:Accessing internal storage in Android在 Android 中访问内部存储
【发布时间】:2017-06-08 15:55:02
【问题描述】:

我正在开发一个需要显示默认相机文件夹中的图像的 Android 应用。我的问题是我不知道如何找到相机照片的内部默认存储文件夹

当我查找将手机连接到 PC 时(它是没有 SD 卡的三星 Galaxy S7),我看到图片存储在 DCIM/Camera 中。但是,这不起作用。正在做:files = new File("DCIM/Camera/"); 导致应用程序说那里什么都没有。

如何找到相机照片的默认内部存储文件夹?

【问题讨论】:

  • getExternalStoragePublicDirectory()DIRECTORY_PICTURES 一起使用,如下所述:developer.android.com/guide/topics/data/…
  • 但这是获取外部存储默认图片文件夹的方法,不是吗?问题是我的手机没有外部存储。反正我试过了,还是不行……
  • 外部存储意味着应用公共存储意味着任何应用都可以访问它。来自用户 POV,这意味着设备的内存(如设备随附的存储盖中)和 SD 卡。内部存储是只有给定应用才能访问的应用私有存储。图像不在内部存储中,它在共享区域中,因此在外部。但它不在 SD 卡中

标签: android android-camera android-internal-storage


【解决方案1】:

首先,你需要了解Android。

  • 内部存储是应用私有存储
  • 外部存储是可公开访问的存储区域

Android 中的外部存储是指公共存储,也就是设备内存和 SD 卡中的内部存储。保存到外部存储意味着设备内部和 SD 卡,而保存到内部存储意味着应用私有存储。

因此,图像存储在外部存储或应用公共存储中,任何应用都可以在其中保存、加载和管理文件。这些图像是公开可用的,因此根据开发人员的定义不在内部存储中。

现在,您需要WRITE_EXTERNAL_STORAGE 权限,如果您以 API 23 为目标,您还需要请求它,因为这是一个危险的权限。

要访问图像,您需要创建一个新文件:

storageDir = new File(
    Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES
    ), 
    "album name here, or remove this part to save or load directly into DCIM"
);

这个可以用来保存或者加载图片,但是记得在加载之前先索引目录找到图片,防止出现IOException

【讨论】:

  • 感谢您的澄清!确实,我不知道外部存储是指那个:)
  • 我明白为什么,在开始Android开发时很难理解区别和区别,因为我们作为用户将SD卡称为外部存储,将内部设备内存称为内部存储。但在开发中,内部存储是应用程序私有存储,外部是公共存储,指来自用户 POV 的内部和外部存储。开始使用 Android 时很难跟踪,但你最终会掌握它的窍门 :)
  • 对于有同样问题的人...虽然这个答案非常完整并且可以完美运行,但如果您使用的 API 版本高于 API 23,除非您询问用户,否则它将无法正常工作对于 WRITE_STORAGE_PERMISSION。在 Manifest 中声明是不够的。
  • 要附加到@VíctorMartínez 的评论,您必须请求 API 23+假设您的目标是 API 23 或更高版本。针对 API 22 进行定位和编译意味着您不必在适当的平台上请求。 (但是您无法访问更新的 API,但我不会参与整个讨论)。从 Android M here 阅读有关权限系统的更多信息。我也确实提到了那里的请求部分:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2015-08-30
  • 2013-01-25
相关资源
最近更新 更多