Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
#1

Получить путь к карте памяти (SD card) - Программирование Android

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

Не педелитесь методом, который возвращает путь к карте памяти, если она есть?
Нащел вот такой метод в интернете, но на некоторых устройствах работает некорректо. Например на 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");
Насколько он надежный?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
27.01.2015, 09:24     Получить путь к карте памяти (SD card) #2
suvorov, я как-то копался в этой теме, там много всяких хитростей, в итоге скачивание файла реализовал через DownloadManager и подзабил на тонкости, но припоминаю, что нюансы есть на разных моделях телефонов. В одном китайском телефоне даже было так, что номера SD-карт были перепутаны, и при извлечении карты памяти стало невозможно что-либо скачивать.
Можно попробовать использовать, например, Environment.getExternalStorageDirectory или Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS).
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
27.01.2015, 18:49  [ТС]     Получить путь к карте памяти (SD card) #3
Увы, но мне как раз нужно работать с картами памяти! Если что найду подходящее, выложу сюда.

Немного отходя от темы, может кто сталкивался:
Создаю раздел на карте памяти, а он не создается, хотя путь правильный! Через штатный файловый менеджер создает как положено. Данный код проверял на сгс4 и сгс3. Так на сгс3 все работает.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
28.01.2015, 09:49     Получить путь к карте памяти (SD card) #4
suvorov, что такое crc4? Какой метод используете для создания раздела? Причём здесь раздел?
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
28.01.2015, 10:03     Получить путь к карте памяти (SD card) #5
CoolMind,
Цитата Сообщение от suvorov Посмотреть сообщение
сгс4 и сгс3
эт кажется samsung galaxy 4 и 3 соответственно.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
28.01.2015, 14:27     Получить путь к карте памяти (SD card) #6
androbro, да, мне тоже так показалось.
suvorov, почитайте-ка stackoverflow, там много написано по поводу Samsung'а.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
28.01.2015, 22:09  [ТС]     Получить путь к карте памяти (SD card) #7
CoolMind,
сгс3/4 - sgs3/4. Извиняись.

Директории создаю с помощью mdirs(); Но это не работает, так как начиная с андроид 4.4, запись на карту пямяти запрещена.
Нашел, как раз на stackoverflow, что можно производить запись в папку Android/data/название_пакета/. Вот только как ее создать??? mdirs() само собой не работает. Просить пользователя содать в ручную тоже не вариант.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
29.01.2015, 10:02     Получить путь к карте памяти (SD card) #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 минут
Добавлю, что на нерутованном устройстве внешние программы не будут иметь доступа к этой папке. Соответственно, вы не сможете, например, открыть файл внешней программой или отправить вложение по электронной почте.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
29.01.2015, 22:41  [ТС]     Получить путь к карте памяти (SD card) #9
CoolMind,
Спасибо! Как раз вчера на ту тему наткнулся. Все работает.
Метод Context.getExternalFilesDir(null) возвращает массив с путями android/data/название_пакета/. Причем, если эти разделы не были созданы, метод создает их. Работает, начиная с 4.4.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2015, 08:46     Получить путь к карте памяти (SD card)
Еще ссылки по теме:
Android Получить полный путь к картинке в ImageView
Получить абсолютный путь к Assets файлам Android
Android Получить список файлов сервера указав путь
Android Как из data.getData() получить путь к файлу?
Android Получить путь к текстовому файлу по его Uri

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

Или воспользуйтесь поиском по форуму:
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
30.01.2015, 08:46     Получить путь к карте памяти (SD card) #10
suvorov, привет!
Пожалуйста! Единственное, мне кажется, что метод более старый, API 8: http://developer.android.com/referen...lang.String%29.
Я в предыдущем сообщении немного напутал с правами доступа, они относились к папке data/data.
Yandex
Объявления
30.01.2015, 08:46     Получить путь к карте памяти (SD card)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru