设备声称有外部存储,但我没有SD卡。

5

三星Galaxy S3没有SD卡,我正在使用此代码来检查存储状态。

使用以下代码:

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write the media
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // We can only read the media
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} else {
    // Something else is wrong. It may be one of many other states, but all we need
    //  to know is we can neither read nor write
    mExternalStorageAvailable = mExternalStorageWriteable = false;
}

也许有人可以解释一下,为什么这部手机会将其内部存储器作为外部存储器来处理?或者是其他原因吗?
2个回答

14

getExternalStorageDirectory不能保证总是返回SD卡目录。

Google文档说:

"不要被这里的 "external" 这个词所迷惑。这个目录更好地被视为媒体/共享存储。它是一个可以容纳相对较大数据量且在所有应用程序中共享(不强制执行权限)的文件系统。传统上,这是一个SD卡,但它也可以实现为设备内置存储器,该存储器与受保护的内部存储器不同,并且可以作为计算机上的文件系统挂载."

你的手机上可能存在"/mnt/sdcard"指向的是内置存储器。

最好检查getExternalStorageDirectory方法的返回路径是否为外部可移动存储。

你可以使用Environment.isExternalStorageRemovable()来进行检查。


2

如果有可用的硬件存储器,Android将始终报告一个挂载的硬件存储器作为外部存储器。

该存储器可以是:

  1. 由制造商安装在设备内部的存储器(内部存储器)
  2. 可能是SD卡(外部存储器)

设备甚至可以同时拥有两者,但Android只会报告其中之一(通常是内部存储器)。

获取已挂载存储器的位置的简单方法是使用adb shell mount命令。

rootfs on / type rootfs (ro)
tmpfs on /dev type tmpfs (rw,nosuid,mode=755)
devpts on /dev/pts type devpts (rw,mode=600)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /mnt/asec type tmpfs (rw,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,mode=755,gid=1000)
/dev/block/mtdblock2 on /system type yaffs2 (ro)
/dev/block/mtdblock3 on /data type yaffs2 (rw,nosuid,nodev)
/dev/block/mtdblock1 on /cache type yaffs2 (rw,nosuid,nodev)
/dev/block/vold/179:1 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/179:1 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)

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