Ну, не совсем.
В конце концов, это то, что говорит StackOverflow . Если вы на самом деле попробуете описанный выше метод на устройстве Samsung, жизнь вам не понравится. Environment.getExternalStoreDirectory () фактически возвращает неверный путь на большинстве устройств Samsung. Вот так я и наткнулся на проблему. Оказывается, вышеприведенный метод на самом деле не гарантирует, что он вернет каталог SD Card. Согласно документации Android API,
«В устройствах с несколькими« внешними »каталогами хранения (такими как безопасное хранилище приложений и монтируемое общее хранилище) этот каталог представляет собой« первичное »внешнее хранилище, с которым пользователь будет взаимодействовать».
Таким образом, вызов не гарантирует, что путь вернул истинно указывает SD-карту. Есть несколько других способов получить «внешний» путь на устройстве, где могут храниться файлы, например, getExternalFilesDir () .
Есть также несколько других приемов, позволяющих получить путь к каталогу SD-карты. Приведенный ниже код работает на большинстве устройств Android (включая Samsung). Это довольно хакерское решение, и кто знает, как долго этот трюк будет работать ( источник ). Вместо использования приведенного ниже кода, возможно, лучше задать вопрос: «Мне действительно нужен каталог SD-карты или просто путь, по которому я могу хранить файлы?»
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
File file = new File("/system/etc/vold.fstab"); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(file); } catch (FileNotFoundException e) { e.printStackTrace(); } try { if (fr != null) { br = new BufferedReader(fr); String s = br.readLine(); while (s != null) { if (s.startsWith("dev_mount")) { String[] tokens = s.split("\\s"); path = tokens[2]; //mount_point if (!Environment.getExternalStorageDirectory().getAbsolutePath().equals(path)) { break; } } s = br.readLine(); } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fr != null) { fr.close(); } if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); } } |
Приятного кодирования и не забудьте поделиться!
Ссылка: руководство для Android: поиск пути к SD-карте от нашего партнера по JCG Исаака Тейлора в блоге Programming Mobile