2013-03-19 9 views
39

4.2.2を実行しているSamsung Galaxy NexusでSDカードにファイルを保存しようとしています。私のアプリから私はgetExternalStorageDirectoryが動作しない

Environment.getExternalStorageDirectory() 

を使用しています。しかし、それは私のSDカード情報がに配置されている場所ではありません

/storage/emulated/0/ 

を返します。自分のSDカードへの正しいパスを取得するために使用できる作業方法はありますか?

+0

あなたが試したことが得られるように、より多くのコードを表示できますか? –

+0

実際はそうかもしれません。 osはおそらくそこにsdカードをロードし、ルートにドライブとして仮想表現を作成します。 –

+0

マルチユーザ機能のために4.2以降に変更されたパス –

答えて

5

Environment.getExternalStorageDirectory()は、デバイスメーカーが「外部ストレージ」とみなすものを指します。私はSDカード以外のものにすることができます。

あなたがここでより多くの情報を得ることがあります。Find an external SD card location

11

は実は、それが正しい場所です。

アンドロイド4,2以降、Googleは複数のユーザーアカウントを導入しました。すべてのユーザーには独自の外部記憶域があり、一意性を維持するためにパスにユーザーIDが含まれています。

プライマリ(デフォルト)のユーザIDは0です。したがって、/storage/emulated/0/は外部ストレージへのパスになります。

+2

theresはそのフォルダ内のレガシーのみです。私の他のアプリでこのメソッドを使用することにも問題はありません。 –

+0

@LukePringシンボリックリンクです。実際のフォルダではありません。 –

+1

そこにシンボリックリンクがあるはずです。/storage/emulated/0:そのようなファイルやディレクトリはありません – VMcPherron

0

確かに?あなたのSDカードはどこにマウントされていると思いますか?そのディレクトリにls -lを実行してください。おそらく/storage/emulated/0/へのシンボリックリンクです。

+0

私は現在、別のアプリケーションのためにls -lを使用していますが、シンボリックリンクはアプリケーションまで表示されますが、私の端末は奇妙なことではありません。 –

-1

getExternalFilesDir()またはgetExternalStoragePublicDirectory()を使用してください。 Android 4.2 documentation

+0

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)は、/ storage/emulated/0/Picturesのパスを返す N7でまだ無効なもの – VMcPherron

+0

そして、実行時にアプリケーション(adbではなく)で利用できるはずですが、私は明らかに複数のファイルを持っているときにそのディレクトリ内の任意のファイルを見つける。 (ls/mnt/shell/emulated/0/Pictures/* jpg) – VMcPherron

9

から

は、私はちょうどこれがandroid.permission.WRITE_EXTERNAL_STORAGE許可の不足に対処するのジェリービーンの方法です学びました。古いバージョンのAndroidではこのような動作は見られませんでした。

ちょうどあなたのAndroidManifest.xmlに次の行を追加します

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+24

これはそれ自体を修正するものではありません。私はマニフェストにそれを設定していますが、それはまだ**/storage/emulated/0 **として戻ってきます。 **/storage/emulated/0 **のシェルを使用すると、存在しません。 ** 0 ** **の代わりに、** legacy **があります。 –

+4

@MichaelNguyen **/storage/emulated/0 **ディレクトリは、adbシェルからは見ることができません(rootでさえありません)。これは、ユーザーが起動したプロセスにのみ存在します。あなたは、デバイスの端末エミュレータからそれを見て、どのアプリからでもアクセスする必要があります。 – ge0rg

1

私はそのためgenymotionエミュレータを使用して考える、 パスが真であるとEclipseで、それは

File Explorer - > mnt - > shell - > emulated -> 0 

がそれを願っていますで見つけ助けて;)

0

私は何とか/ storage/emulated/0にシンボリックリンクを失ってしまって、同様のエラーが発生しました。私がしたことは、カメラアプリを使って写真を撮ることでした。私は、そのディレクトリがファイルエクスプローラから存在しなかったが、写真の詳細が/ storage/emulated/0の範囲内にあることを確認しました。その後、私は電話を再起動しました。再起動後、リンクが存在しました。

関連する問題