Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 111
1

Получить путь к карте памяти (SD card)

27.01.2015, 00:13. Показов 4358. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не педелитесь методом, который возвращает путь к карте памяти, если она есть?
Нащел вот такой метод в интернете, но на некоторых устройствах работает некорректо. Например на galaxy s3 все ок, а вот на s4 не находит.

Java
1
2
3
4
5
6
7
8
9
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
public static HashSet<String> getExternalMounts() {
    final HashSet<String> out = new HashSet<String>();
    String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
    String s = "";
    try {
        final Process process = new ProcessBuilder().command("mount")
                .redirectErrorStream(true).start();
        process.waitFor();
        final InputStream is = process.getInputStream();
        final byte[] buffer = new byte[1024];
        while (is.read(buffer) != -1) {
            s = s + new String(buffer);
        }
        is.close();
    } catch (final Exception e) {
        e.printStackTrace();
    }
 
    // parse output
    final String[] lines = s.split("\n");
    for (String line : lines) {
        if (!line.toLowerCase(Locale.US).contains("asec")) {
            if (line.matches(reg)) {
                String[] parts = line.split(" ");
                for (String part : parts) {
                    if (part.startsWith("/"))
                        if (!part.toLowerCase(Locale.US).contains("vold"))
                            out.add(part);
                }
            }
        }
    }
    return out;
}
Добавлено через 26 минут
Так же нашел еще метод:

Java
1
System.getenv("SECONDARY_STORAGE");
Насколько он надежный?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2015, 00:13
Ответы с готовыми решениями:

Не получается получить путь к карте памяти
Всем привет. У меня вот такой вопрос: storage/sdcard0 это путь к памяти телефона storage/sdcard1...

Путь к карте памяти
Добрый день! У меня лежит файл в памяти телефона. В приложении прописываю путь к файлу вот таким...

Путь к карте памяти в режиме отладки /storage/emulated/0/
Получаю путь к карте памяти: Environment.getExternalStorageDirectory().toString() Возвращает...

Как получить путь к SD карте на ЛЮБОМ устройстве?
Повторяю - на ЛЮБОМ устройстве.

9
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
27.01.2015, 09:24 2
suvorov, я как-то копался в этой теме, там много всяких хитростей, в итоге скачивание файла реализовал через DownloadManager и подзабил на тонкости, но припоминаю, что нюансы есть на разных моделях телефонов. В одном китайском телефоне даже было так, что номера SD-карт были перепутаны, и при извлечении карты памяти стало невозможно что-либо скачивать.
Можно попробовать использовать, например, Environment.getExternalStorageDirectory или Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS).
1
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 111
27.01.2015, 18:49  [ТС] 3
Увы, но мне как раз нужно работать с картами памяти! Если что найду подходящее, выложу сюда.

Немного отходя от темы, может кто сталкивался:
Создаю раздел на карте памяти, а он не создается, хотя путь правильный! Через штатный файловый менеджер создает как положено. Данный код проверял на сгс4 и сгс3. Так на сгс3 все работает.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
28.01.2015, 09:49 4
suvorov, что такое crc4? Какой метод используете для создания раздела? Причём здесь раздел?
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
28.01.2015, 10:03 5
CoolMind,
Цитата Сообщение от suvorov Посмотреть сообщение
сгс4 и сгс3
эт кажется samsung galaxy 4 и 3 соответственно.
1
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
28.01.2015, 14:27 6
androbro, да, мне тоже так показалось.
suvorov, почитайте-ка stackoverflow, там много написано по поводу Samsung'а.
0
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 111
28.01.2015, 22:09  [ТС] 7
CoolMind,
сгс3/4 - sgs3/4. Извиняись.

Директории создаю с помощью mdirs(); Но это не работает, так как начиная с андроид 4.4, запись на карту пямяти запрещена.
Нашел, как раз на stackoverflow, что можно производить запись в папку Android/data/название_пакета/. Вот только как ее создать??? mdirs() само собой не работает. Просить пользователя содать в ручную тоже не вариант.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
29.01.2015, 10:02 8
suvorov, хорошо.
Да, mkdirs() - это правильная операция для создания папки (не раздела). В папку Android/data/название_пакета/ действительно можно записывать, она специально предназначена для этого. Раньше был разброд и шатание, каждая программка писала на карту памяти, куда взбрендит в голову её создателя. При удалении программы удаляются и данные из этой папки.
Да, я согласен, что на Samsung, Nexus и многих телефонах с Android 4.3, 4.4 (судя по форумам) будут наблюдаться проблемы с картой памяти. Поэтому общим способом записи являются папки Environment.getExternalStoragePublicDirectory (с нужным параметром) и Context.getExternalFilesDir(null). Например, вы можете почитать об этом на http://stackoverflow.com/a/22426975/2914140.
Этим способом записывается большинство баз данных. Вот пример: databasePath = context.getApplicationInfo().dataDir + "/databases/".

Добавлено через 8 минут
Добавлю, что на нерутованном устройстве внешние программы не будут иметь доступа к этой папке. Соответственно, вы не сможете, например, открыть файл внешней программой или отправить вложение по электронной почте.
1
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 111
29.01.2015, 22:41  [ТС] 9
CoolMind,
Спасибо! Как раз вчера на ту тему наткнулся. Все работает.
Метод Context.getExternalFilesDir(null) возвращает массив с путями android/data/название_пакета/. Причем, если эти разделы не были созданы, метод создает их. Работает, начиная с 4.4.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
30.01.2015, 08:46 10
suvorov, привет!
Пожалуйста! Единственное, мне кажется, что метод более старый, API 8: http://developer.android.com/r... .String%29.
Я в предыдущем сообщении немного напутал с правами доступа, они относились к папке data/data.
0
30.01.2015, 08:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2015, 08:46
Помогаю со студенческими работами здесь

Получить доступ к внешней карте памяти (Android 6)
В предыдущей теме мне помогли разобраться с доступом к внутренней памяти. Попытался получить...

Не определяется путь к SD карте
Перепробовал все методы, указанные на этом форуме. Был на всех ветках, посвященных работой с картой...

Найти путь по карте до конкретного адреса
Ребята выручайте,не знаю куда обратиться....... Задание: Поступает вызов о пожаре в...

Ubuntu на SD карте памяти
Есть ноутбук HP Pavilion g6-2209sr. Хочу установить Ubuntu на SD карту памяти 32 ГБ. Читал в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru