私の理解が正しければ、あなたが「外部」USB パスと呼んでいるものは、実際にはコンピューター上の SD カードのマウント ポイントです。ほとんどの場合、SD カードにはラベルが付いていますuserdata1
。したがって、コンピューターにマウントされると、/mnt/userdata1
マウント ポイントが取得されます。ただし、これは厳密には必要ではなく、任意のマウント ポイントにすることができます。実際、それを別のコンピューターに接続すると、簡単に別のマウント ポイントになる可能性があります。
このパスはコンピューターのオペレーティング システムによって決定されるため、コンピューターでこのパスを見つける必要があります (これは、電話を PC に接続するたびに異なる可能性があるため、毎回行う必要があります)。 .
あなたの質問とパス構造 ( /mnt/userdata1
) から、Linux または他の UNIX バージョンを使用していると思います。したがって、PC で実行mount
して、マウントされているデバイスのリストを表示できます。たとえば、これが私の Mac での出力です。
$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk1s1 on /Volumes/ALEKS540 (msdos, local, nodev, nosuid, noowners)
出力の最後の行に注意してください。これは、コンピューターに SD カードがマウントされた接続済みの Android フォンです。Mac では、マウント ポイントは/Volumes
ではなく の下に作成され/mnt
ます。それ以外は、ALEKS540が私の SD カードのラベルなので、このようにマウントされています。
電話の内部では、まだ としてマウントされてい/mnt/sdcard
ます。
Android の観点からは、次の 3 つのストレージ タイプが考えられます。
- デバイスの下に常にマウントされている内部メモリ
/
で、SD カードと下の USB ストレージを除くすべてが含まれています。
- SD カード- これは「外部ストレージ」と呼ばれ、通常は としてマウントされます
/mnt/sd
が、常にではありません。 Environment.getExternalStorageDirectory()
SD カードのマウント ポイントのパスを返します。
- USB ストレージ- これは非常に少数のデバイス (外部ストレージ用の USB ホスト モードをサポートするデバイス) でのみサポートされています。これは の下のどこかにマウントされ
/mnt
ますが、正確な場所は異なります。Android NDK を使用して、マウントされたデバイスに問い合わせて反復処理し、目的のデバイスを見つける必要があります。