正解です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 のいずれを使用しても、別のユーザーとして実行している間はデータにアクセスできません。アプリの観点からは、各ユーザーは完全に個別のデバイスで実行されています。