Environment.getExternalStorageDirectory(). GetAbsolutePath() дает другой путь - Android

Я пытаюсь что-то записать в память телефона.

Сначала я жестко закодировал путь как:

myFile = new File("/sdcard/" + txtName.getText() + ".txt");

Это работает полностью нормально.

И затем, eclipse дает мне предупреждение, говорящее, что вместо этого я не должен был жестко закодировать такой путь, я должен сделать следующее:

myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ txtName.getText() + ".txt");

Затем я следую рекомендациям по исправлению и избегаю предупреждения.

Однако я встречал исключение во время выполнения в классе writer.

Затем я печатаю Environment.getExternalStorageDirectory().getAbsolutePath() для цели отладки. Результатом является

/хранение/sdcard0

. Но hardcoded, который отлично работал до этого, фактически

/SDCard

.

Почему это произойдет?

И если я хочу избежать предупреждения, как я могу получить каталог путей более формальным и правильным способом вместо hardcoding пути?

P.S.: Мой телефон - HTC One X, у которого нет внешнего гнезда для SD-карт. Я полагаю, что 32-гигабайтное хранилище поставляется со встроенной SD-картой, поэтому суть должна быть одинаковой.

Ответ 1

Почему это произойдет?

Поскольку путь к внешнему хранилищу менялся с годами, поэтому вы никогда не должны были жестко закодировать путь в первую очередь.

как я могу получить каталог путей более формальным и правильным способом вместо hardcoding пути?

Используйте Environment.getExternalStorageDirectory().

В тестовой среде /sdcard представляет собой символическую ссылку или жесткую ссылку на /storage/sdcard0, как установлено производителем устройства. Тем не менее, нет гарантии, что все устройства будут иметь символическую ссылку /sdcard.

Я предполагаю, что 32-гигабайтное хранилище поставляется со встроенной SD-картой.

Внешнее хранилище - это часть встроенной 32 ГБ флэш-памяти.

Ответ 2

Удалите .getAbsolutePath(), и все будет хорошо. Environment.getExternalStoreDirectory() предоставит вам путь к тому месту, где производство установило внешнее хранилище.