web-dev-qa-db-ja.com

/ sdcard / emulated / 0と/ sdcardの違い

私は奇妙な問題に腹を立てています。私のコード内にフォルダーを作成した場合

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つ(つまり、使用したいフォルダー)は空のままなので、これは私にとって問題です。どうして?

13
giozh

データを読み返してみましたか?/storage/emulated/0 /は、タブレットで複数のユーザーをサポートするためにJBで導入された新しいパスです。ただし、Environment.getExternalStorageDirectory()を使用して外部ファイルにアクセスする限り、それらが実際にどこに存在するかは問題ではありません。

ここにいくつかの追加情報があります: https://Android.stackexchange.com/questions/35541/why-did-sdcard-turn-into-sdcard-0-with-4-2

4
Kai

/ 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 にアクセスしてください。

0
duggu