2

Eclipse ファイル エクスプローラーを使用して Android ディレクトリをナビゲートするmnt/sdcardmnt/sdcard2、次の画像が表示されました。

呼び出すEnvironment.getExternalStorageDirectory()と が返ってくるので、は で、実際の SD カードmnt/sdcardだと思いますmnt/sdcadが、本当ですか? また、コードを使用してファイルにアクセスするにはどうすればよいですか?external storagemnt/sdcard2mnt/sdcard2

ここに画像の説明を入力

PS

外部SDカードに直接アクセスできるようです:

    File extStorageDir = Environment.getExternalStorageDirectory();
    String parent = extStorageDir.getParent();
    File extSdCardDir = new File(parent+"/sdcard2");

    File file = new File(extSdCardDir, "DemoFile.jpg");

しかし、それ以外の場合、追加のSDカードの名前が変わるのだろうか。

4

1 に答える 1

1

正解ですgetExternalStorage。内蔵の外部ストレージを返却します。残念ながら、Jelly Bean の時点で、デバイスに内蔵ストレージと SD カードがある場合、Jelly Bean アプリケーションは SD カードを利用できなくなりました。シェル コマンドまたはハードコーディング パスを使用して回避することはできますが、root がないと、信頼できる方法でアクセスできなくなります。

これは最近 Android CTS に追加されたばかりで、Play ストアを使用するためにすべての OEM が準拠する必要があります。

互換性プログラムの概要 | Android デベロッパー

Android 4.3 互換性定義のセクション 9.5 (pg. 34)

複数の外部ストレージ パスを含むデバイス実装では、Android アプリケーションがセカンダリ外部ストレージに書き込むことを許可してはなりません。

ストレージ オプション | Android デベロッパー

外部ストレージ用に内部ストレージのパーティションを使用しているデバイスが、SD カード スロットを提供している可能性もあります。この場合、SD カードは外部ストレージの一部ではなく、アプリはそれにアクセスできません (追加のストレージは、システムがスキャンするユーザー提供のメディアのみを対象としています)。

Android 4.2 API | Android デベロッパー

マルチユーザー環境でのデータの保存

アプリがユーザー設定を保存したり、データベースを作成したり、ユーザーの内部または外部ストレージ スペースにファイルを書き込んだりするたびに、そのデータはそのユーザーとして実行されている間のみアクセスできます。

アプリがマルチユーザー環境で適切に動作することを確認するには、ハードコードされたパスを使用して内部アプリ ディレクトリまたは外部ストレージの場所を参照せず、代わりに常に適切な API を使用します。

For access to internal storage, use getFilesDir(), getCacheDir(), or openFileOutput().
For access to external storage, use getExternalFilesDir() or getExternalStoragePublicDirectory(). 

特定のユーザーのデータを保存するためにこれらの API のいずれを使用しても、別のユーザーとして実行している間はデータにアクセスできません。アプリの観点からは、各ユーザーは完全に個別のデバイスで実行されています。

于 2013-09-30T06:05:16.837 に答える