私は奇妙な問題に腹を立てています。私のコード内にフォルダーを作成した場合
directory_path = Environment.getExternalStorageDirectory()
+ "/" + context.getResources().getString(R.string.app_name);
directory = new File(directory_path);
if (!directory.exists()) {
directory.mkdirs();
}
/ sdcard /内に新しいフォルダが作成されます。 logcat directory_path変数で印刷しようとすると、パスは異なります:/ storage/emulated/0 /そのパスに移動すると、/ sdcard /に作成されたのと同じ名前の別のフォルダーが見つかりました。そのフォルダーにデータを書き込もうとすると、everithingは/ storage/emulated/0の1つに入り、もう1つ(つまり、使用したいフォルダー)は空のままなので、これは私にとって問題です。どうして?
データを読み返してみましたか?/storage/emulated/0 /は、タブレットで複数のユーザーをサポートするためにJBで導入された新しいパスです。ただし、Environment.getExternalStorageDirectory()
を使用して外部ファイルにアクセスする限り、それらが実際にどこに存在するかは問題ではありません。
ここにいくつかの追加情報があります: https://Android.stackexchange.com/questions/35541/why-did-sdcard-turn-into-sdcard-0-with-4-2
/ storage/emulated/0 /:私の知る限り、これは「エミュレートされたMMC」(「所有者の部分」)を指します。通常、これは内部のものです。ここで「0」はユーザーを表し、「0」は最初のユーザー、つまりデバイス所有者です。追加のユーザーを作成すると、この数はユーザーごとに増加します。
/ storage/emulated/legacy /以前と同じですが、現在動作しているユーザーの部分を指しています(所有者の場合、これはへのシンボリックリンクになります)
/ storage/emulated/0 /)。したがって、このパスはすべてのユーザーを彼の「部分」に連れて行くはずです。
/ sdcard /:Shywimのコメントによると、これはへのシンボリックリンクです...
/ mnt/sdcard(Android <4.0)
/ storage/sdcard0(Android 4.0以降)
詳細については、 stackexchange にアクセスしてください。