4.2.2 を実行している Samsung Galaxy Nexus の SD カードにファイルを保存しようとしています。使用しているアプリから
Environment.getExternalStorageDirectory()
しかし、それは戻ります
/storage/emulated/0/
私のSDカード情報がある場所ではありません。SDカードへの正しいパスを取得するために使用できる作業方法はありますか?
実際、それが正しい位置です。
Android 4.2 以降、Google は複数のユーザー アカウントを導入しました。すべてのユーザーには独自の外部ストレージがあり、一意性を維持するためにパスにユーザー ID が含まれています。
プライマリ (デフォルト) ユーザーの ID は 0 です。したがって/storage/emulated/0/
、外部ストレージへのパスとして取得します。
I just learned this is the Jelly Bean's way of dealing with the lack of android.permission.WRITE_EXTERNAL_STORAGE
permission. I haven't seen such a behavior with older versions of Android.
Just add this line to your AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Environment.getExternalStorageDirectory()
デバイスの製造元が「外部ストレージ」と見なしたものを指します。私はSDカード以外のものになることができます。
詳細については、こちらを参照してください:外付け SD カードの場所を探す
genymotionエミュレーターを使用しているためだと思います。パスはtrueで、Eclipseでは次の場所にあります
File Explorer - > mnt - > shell - > emulated -> 0
それが役に立てば幸い ;)
/storage/emulated/0 のシンボリック リンクが何らかの形で失われ、同様の障害が発生しました。私がやったのは、カメラアプリを使って写真を撮ることでした。ファイル エクスプローラーからはそのディレクトリが存在しませんでしたが、写真の詳細には /storage/emulated/0 内にあることがわかりました。次に、電話を再起動しました。再起動後、リンクは存在していました。
もちろん?SDカードはどこにマウントされていると思いますか?そのディレクトリで実行してみてください。ls -l
おそらく へのシンボリック リンク/storage/emulated/0/
です。
getExternalFilesDir()
またはを使用してみてくださいgetExternalStoragePublicDirectory()
。