6

USBケーブルでAndroidデバイスとPCを接続しています。私の内部SDカードの場所のパスとして/mnt/sdcard。しかし、私の外部USBデバイスパスは/mnt/userdata1. このコードを使用して、 Internal SD Card Path のみを見つけようとしていますEnvironment.getExternalStorageDirectory()。このコードを使用して、内部 SD カード パスでのみアクセスしています。外部 USB パスにアクセスする方法。

たとえば、スクリーンショットはこちら...

この例ではInternal Memory、 、External SD card、が含まれていUSB Storageます。このパス ( Internal MemoryExternal SD cardおよびUSB Storage) をプログラムで見つける方法。このコードEnvironment.getExternalStorageDirectory()では、すべてのInternal Memoryファイルのみからファイルが表示されます。では、他のパスにアクセスする方法 (External SD cardおよびUSB Storage)

コードを教えてください。ありがとう..

4

1 に答える 1

2

私の理解が正しければ、あなたが「外部」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 つのストレージ タイプが考えられます。

  1. デバイスの下に常にマウントされている内部メモリ/で、SD カードと下の USB ストレージを除くすべてが含まれています。
  2. SD カード- これは「外部ストレージ」と呼ばれ、通常は としてマウントされます/mnt/sdが、常にではありません。 Environment.getExternalStorageDirectory()SD カードのマウント ポイントのパスを返します。
  3. USB ストレージ- これは非常に少数のデバイス (外部ストレージ用の USB ホスト モードをサポートするデバイス) でのみサポートされています。これは の下のどこかにマウントされ/mntますが、正確な場所は異なります。Android NDK を使用して、マウントされたデバイスに問い合わせて反復処理し、目的のデバイスを見つける必要があります。
于 2012-07-02T10:49:06.893 に答える