web-dev-qa-db-ja.com

getExternalStorageDirectoryが機能しない

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

Environment.getExternalStorageDirectory()

しかし、それは戻ります

/storage/emulated/0/

SDカード情報が保存されている場所ではありません。 SDカードへの正しいパスを取得するために使用できる作業方法はありますか?

44
Luke Pring

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

From Android 4,2以降、Googleは複数のユーザーアカウントを導入しました。すべてのユーザーは、一意性を維持するためのパスにユーザーIDを持つ独自の外部ストレージを持っています。

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

15
Raghav Sood

ジェリービーンがAndroid.permission.WRITE_EXTERNAL_STORAGE許可。 Androidの古いバージョンでは、このような動作は見られません。

次の行をAndroidManifest.xmlに追加するだけです。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
9
ohaleck

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

詳細については、こちらをご覧ください: 外部SDカードの場所を見つける

5

私はgenymotionエミュレータを使用しているため、パスはtrueであり、Eclipseでは次の場所にあると思います

File Explorer - > mnt - > Shell - > emulated -> 0 

それが役に立てば幸い ;)

1
farshad22

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

0

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

0
thejh