安卓SD卡问题

7

我目前在开发一个APP并使用外部SD卡时遇到了一些问题。

来自developer.android.com的信息如下:

每个Android兼容设备都支持共享的“外部存储”,您可以使用它来保存文件。这可以是可移动存储介质(例如SD卡)或内部(不可移动)存储。保存到外部存储器的文件是全局可读的,并且当用户启用USB大容量存储在计算机上传输文件时,可以由用户修改。

这可能是一个问题吗?

我正在使用LG L5(E610)。

我已经在清单文件中添加了正确的权限。

我的另一个问题可能与此问题有关。

非常感谢您的任何帮助。谢谢。


请针对每个问题单独提出一个问题。 - pcans
已经将问题分开了。 - Rik
2个回答

6
您说:
第一个问题是我检查是否有SD卡已插入。但即使没有插入SD卡,此函数返回true。
我认为您遇到了一件需要花些时间来理解的事情,因为它并不十分清晰。在Android中,您将找到两种类型的存储器:
1. 系统存储器:始终可用,高度安全,您的应用程序只能访问专门为您分配的一小部分内容,其他应用程序无法读取您在那里的数据。
2. 公共存储器:常被称为外部或SD卡。每个应用程序都可以读写访问所有存储器内容。但它并非总是可用的,因为您可以将其“挂载”到计算机上,在Android中取消挂载,从而隐藏它(但仅适用于Android 3.X之前)。
在实际设备中,您将会发现以下三种类型的设备:
1. 某些设备的公共存储器是焊在内部芯片上的,所以SD卡名称并不适用。但路径可能是“/ sdcard”。
2. 在其他某些设备上,这个共享存储器是在一个真正的SD卡上,您可以将其拆下来。
3. 在另一些设备上,这个存储器的一部分位于芯片上,另一部分位于SD卡上。
基于您所说,我认为您的设备属于第三种类型。因此,您的物理SD卡将在以下路径找到: / mnt / sdcard / external_sd / 。不幸的是,这是特定于设备的,我不认为Android API中有获取此路径的功能。
此外,请注意,自从Android 3.X以来,我们不再需要“挂载”此共享存储器。因此,由于我们现在正在使用MTP协议,您的共享存储器将始终存在于Android中。
这就是为什么isExternalStorageAvailable()返回true,即使您的SD卡已移除。

文件rootsd = Environment.getExternalStorageDirectory();可能会给出正确的目录,但我现在无法尝试。或者您是说即使在第三种类型的设备路径中也可能存在没有卡的情况? - weston
在第三种情况下,getExternStorageDirectory()会给出"/mnt/sdcard/",它存在于即使您的物理sdcard已被移除仍然可以读取或写入。 - pcans
使用getExternalStorageDirectory()函数确实可以获取路径“/mnt/sdcard/”,但要进入文件夹,我需要添加“external_sd/”,但这会导致读取文件时出现问题(请参见其他问题)。 - Rik

0

问题已解决,是自己的问题。

感谢大家的帮助。


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