5

SDカードのないSamsung galaxy S3。このコードを使用してストレージの状態を確認しています。

このコードの使用:

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;
}

それで、この電話が何らかの理由で内部メモリを外部メモリとして扱っているかどうか、誰かが私に説明できるでしょうか? または何?

4

3 に答える 3

14

getExternalStorageDirectoryは常にSDカードを返すとは限りません。

Googleドキュメントによると:

「ここで「外部」という言葉と混同しないでください。このディレクトリは、メディア/共有ストレージと考えるとよいでしょう。これは、比較的大量のデータを保持でき、すべてのアプリケーションで共有されるファイルシステムです(強制されません)。従来、これはSDカードですが、保護された内部ストレージとは別のデバイスに組み込みストレージとして実装され、コンピューターにファイルシステムとしてマウントできる場合もあります。」

「/mnt/sdcard」がお使いの携帯電話の内蔵ストレージを指している可能性があります。

メソッドからのリターンパスgetExternalStorageDirectoryが外部リムーバブルストレージであるかどうかを確認することをお勧めします。

これを確認するには、 Environment.isExternalStorageRemovable()を使用できます。

于 2013-01-28T07:11:23.387 に答える
2

Androidは、マウントされた1つのハードウェアメモリ(使用可能な場合)を常に外部ストレージとして報告します。

そのメモリは次のようになります。

  1. メーカーによってデバイスの内部に取り付けられています(内部メモリ)
  2. SDカード(外部メモリ)にすることができます

デバイスは両方を持つこともできますが、Androidはそのうちの1つ(ほとんどは内部のもの)のみを報告ます。

どこにマウントされているかを取得する簡単な方法はです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)
于 2013-01-28T07:11:23.183 に答える
0

次のコードを使用して、デバイスにメモリカードがあるかどうかを確認します。

Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

if(isSDPresent)
{
  // yes SD-card is present
}
else
{
 // Sorry
}
于 2013-01-28T07:21:18.170 に答える