访问安卓内部存储

3
我正在开发一款Android应用程序,需要从默认相机文件夹中显示图像。我的问题是我不知道如何找到相机照片的内部默认存储文件夹。
当我通过连接手机到电脑上查找时(这是一台没有SD卡的三星Galaxy S7),我看到图片存储在“DCIM / Camera”中。但是,这并不起作用。执行:files = new File("DCIM/Camera/");会导致应用程序说那里什么也没有。
我该如何找到相机照片的默认内部存储文件夹?

1
请按照此处所述使用getExternalStoragePublicDirectory()DIRECTORY_PICTURES:https://developer.android.com/guide/topics/data/data-storage.html#filesExternal - Ken Wolf
https://dev59.com/6WQn5IYBdhLWcg3wPlCj - IAmGroot
但这是获取外部存储默认图片文件夹的方法,不是吗?问题是我的手机没有外部存储。无论如何,我尝试了它,但它不起作用... - Víctor Martínez
外部存储意味着应用程序公共存储,这意味着任何应用程序都可以访问它。从用户的角度来看,这意味着设备的内存,即随设备提供的存储容量和SD卡。内部存储是应用程序私有存储,只有特定的应用程序才能访问。图像不在内部存储中,而是在共享区域中,因此是外部存储。但它并不在SD卡中。 - Zoe stands with Ukraine
1个回答

10

首先,您需要了解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异常


谢谢澄清!的确,我不知道外部存储是指那个 :) - Víctor Martínez
3
我理解为什么在开始进行Android开发时很难理解和知道区别,因为我们作为用户将SD卡称为外部存储器,将内部设备存储器称为内部存储器。然而,在开发中,内部存储器是应用程序的私有存储空间,而外部存储器是公共存储空间,指的是来自用户视角的内部和外部存储器。在开始进行Android开发时很难跟踪,但最终你会掌握的:) - Zoe stands with Ukraine
1
对于遇到相同问题的人们... 尽管这个解答非常完整并且它可以完美地工作,但是如果你正在使用的API版本大于API 23,除非你要求用户授予WRITE_STORAGE_PERMISSION权限,否则它不会起作用。仅在Manifest中声明权限是不够的。 - Víctor Martínez
附加到@VíctorMartínez的评论中,您必须在API 23+上请求假设您的目标是API 23或更高版本。针对API 22进行定位和编译意味着您不必在适当的平台上请求。 (但您将失去对新API的访问权限,但我不会涉及整个讨论)。 在此处阅读有关Android M权限系统的更多信息。 我也在那里提到了请求部分 :) - Zoe stands with Ukraine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接