先日入手した Sony Tableもそうなんだけど、16Gや 32Gといった比較的大容量のメモリを内蔵して /mnt/sdcard/に見せている。
で、SDカードを追加するとどうなるか。
/mnt/sdcard2/にマウントされる。*1
このパスが仕様で決まっていれば良いのだけど、実際は機種によって違っており、具体的にどこへマウントされるかを知る標準的な方法は存在しない。
ってなわけだから、アプリによってはこれらにアクセス*2 する手段が存在しない。*3
こういうアプリで使うデータは全て内蔵メモリへ格納する必要がある。*4
PCへつないだときに単純にマスストレージデバイスとして認識されるのなら救いがあるのだけど、Sony Tabletのように余計なお世話機能があるとかなり怠いことに。
…落ちはないっす。
アプリを作る側としては手当たり次第に見て回るか機種固有情報のテーブルをもつしかない状態に対する単なる愚痴。
2012/04/25追記
XPERIA acro HD(SO-03D)を触ってみたところ、「/mnt/sdcard/external_sd/」にマウントされるのを確認。
Environment.getExternalStorageDirectory()は /mnt/sdcard/を返すので、「知ってさえいれば」本当の SDカードへのアクセスは容易だね。
2012/05/12追記
HYUNDAI A7 HDを触ってみたところ、「/mnt/extsd/」にマウントされるのを確認。
Sony Tablet同様、知っていないとアクセスできないタイプだね。
ただ、PCに USB接続すると「/mnt/sdcard/」「/mnt/extsd/」それぞれ独立したストレージとして認識してくれるので扱いはこちらの方が数段楽。
ちなみに USB接続されたストレージは「/mnt/usbhost1/」にマウントされた。