Как найти путь до карты памяти

Время на прочтение
5 мин

Количество просмотров 265K

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

Итак, начнем с теории.

Терминология

Гугл нам говорит, что есть следующие понятия:

  1. Внутренняя (internal) память — это часть встроенной в телефон карты памяти. При ее использовании по умолчанию папка приложения защищена от доступа других приложений (Using the Internal Storage).
  2. Внешняя (external) память — это общее «внешнее хранилище», т.е. это может быть как часть встроенной памяти, так и удаляемое устройство. Обычно это часть встроенной памяти, как удаляемое устройство я видел в последний раз на андройде 2.2, где встроенная память была около 2Гб, и подключаемая память становилась внешней (Using the External Storage).
  3. Удаляемая (removable) память — все хранилища, которые могут быть удалены из устройства без «хирургических» вмешательств.

До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File[] getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.

Результаты поиска

Чтобы ответить на поставленный вопрос я обратился к всезнающему гуглу. Но и он мне не дал четкого ответа. Было рассмотрено множество вариантов определения от использования стандартных функций, которые ведут к внешней памяти, но ничего общего с удаляемыми устройствами хранения данных они не имеют, до обработки правил монтирования устройств (Android же на ядре Linux работает). В последних случаях были использованы «зашитые» пути к папке с примонтироваными устройствами (в различных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются.

В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.

Описание кода

Был создан класс MountDevice, который содержит в себе путь к устройству, тип устройства и некий хэш.
Типов устройств выделено два (внутреннюю память я не стал трогать, так как к ней доступ можно получить через API системы).

public enum MountDeviceType {
    EXTERNAL_SD_CARD, REMOVABLE_SD_CARD
}

И был создан класс StorageHelper, который и осуществляет поиск доступных карт памяти.

В классе StorageHelper реализовано два способа поиска — через системное окружение (Environment) и с использованием утилиты Linux mount, а точнее результата ее выполнения.

Способ первый — Environment

При работе с окружением я использую стандартную функцию getExternalStorageDirectory() для получения информации о внешней памяти. Чтобы получить информацию о удаляемой памяти, я использую переменную окружения «SECONDARY_STORAGE«.

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

Функция fillDevicesEnvirement

String path = android.os.Environment.getExternalStorageDirectory()
		.getAbsolutePath();
if (!path.trim().isEmpty()
		&& android.os.Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED)) {
	testAndAdd(path, MountDeviceType.EXTERNAL_SD_CARD);
}

// Получаем ремувабл
String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE");
if (rawSecondaryStoragesStr != null
		&& !rawSecondaryStoragesStr.isEmpty()) {
	// All Secondary SD-CARDs splited into array
	final String[] rawSecondaryStorages = rawSecondaryStoragesStr
			.split(File.pathSeparator);
	for (String rawSecondaryStorage : rawSecondaryStorages) {
		testAndAdd(rawSecondaryStorage,
				MountDeviceType.REMOVABLE_SD_CARD);
	}
}

Вариант решения взят со stackoverflow. Ответ где-то там внизу.

Способ второй — mount

Так как у меня долго не получалось заставить систему мне сказать путь к удаляемой памяти, я решил искать в сторону примонтированных устройств. В системе есть файлы конфигурации, в которых описаны правила монтирования внешних устройств. Все бы хорошо, но на Android версии 4.* к этому файлу простым смертным доступа нет, поэтому рассматривать этот способ не буду.

Вернемся к утилите mount. При запуске без параметров команда возвращает список смонтированных файловых систем. Удаляемые устройства имеют обычно формат файловой системы FAT, то будем выделять строки, в которых есть характеристика «fat«. Внешняя память будет характеризоваться параметром «fuse«.

Примечание: при использовании такого способа не всегда корректно (скорее всего я что-то не учел) определяются типы смотнтированных устройств. Разницу замечал на разных версиях Android. Поэтому этот способ можно использовать как дополнительный.

Функция fillDevicesProcess

try {
	Runtime runtime = Runtime.getRuntime();
	proc = runtime.exec("mount");
	try {
		is = proc.getInputStream();
		isr = new InputStreamReader(is);
		br = new BufferedReader(isr);
		while ((line = br.readLine()) != null) {
			if (line.contains("secure"))
				continue;

			if (line.contains("asec"))
				continue;

			if (line.contains("fat")) {// TF card
				String columns[] = line.split(" ");
				if (columns != null && columns.length > 1) {
					testAndAdd(columns[1],
							MountDeviceType.REMOVABLE_SD_CARD);
				}
			} else if (line.contains("fuse")) {// internal(External)
												// storage
				String columns[] = line.split(" ");
				if (columns != null && columns.length > 1) {
					// mount = mount.concat(columns[1] + "n");
					testAndAdd(columns[1],
							MountDeviceType.EXTERNAL_SD_CARD);
				}
			}
		}
	} finally {
		...
	}
} catch (Exception e) {
	...
}

Вариант решения взят со stackoverflow. Ответов там несколько примерно одинаковых.

Про дублирование

Многие замечали в директории монтирования устройств такую картину:

/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/

И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:

  1. создаем StringBuilder
  2. записываем в него общий размер устройства и размер используемого пространства устройства
  3. обходим содержимое корня устройства
  4. записываем имя каталога
  5. записываем имя файла и размер
  6. вычисляем hash

Своя функция расчета хэша calcHash

private int calcHash(File dir) {
	StringBuilder tmpHash = new StringBuilder();

	tmpHash.append(dir.getTotalSpace());
	tmpHash.append(dir.getUsableSpace());

	File[] list = dir.listFiles();
	for (File file : list) {
		tmpHash.append(file.getName());
		if (file.isFile()) {
			tmpHash.append(file.length());
		}
	}

	return tmpHash.toString().hashCode();

}

Пример использования

/* Получаем базовый путь */
if (!mPreferences.contains(PREFS_BASEBATH)) {
	// Если еще не сохранялся в настройках, то пытаемся найти карты
	// памяти
	ArrayList<MountDevice> storages = StorageHelper.getInstance()
			.getRemovableMountedDevices();
	// проверяем съемные карты памяти
	if (storages.size() != 0) {
		setBasePath(storages.get(0).getPath() + mAppPath);
	} else if ((storages = StorageHelper.getInstance() // Проверяем
														// внутреннюю
														// память
			.getExternalMountedDevices()).size() != 0) {
		setBasePath(storages.get(0).getPath() + mAppPath);
	}
} else {
	// Вытаскиваем из сохранненых настроек
	mBasePath = mPreferences.getString(PREFS_BASEBATH, context
			.getFilesDir().getParent());
}

Заключение

Подробные рассуждения по этому вопросу понимания памяти в Android, некоторые советы можно прочитать тут.

Исходный код всего класса

расположен

еще нигде не расположен. На днях постараюсь разместить на gitHub.

Кто еще какими способами пользуется?

UPD1: Исходный код класса на bitbucket

How to get the internal and external sdcard path in android

Methods to store in Internal Storage:

File getDir (String name, int mode)

File getFilesDir () 

Above methods are present in Context class

Methods to store in phone’s internal memory:

File getExternalStorageDirectory ()

File getExternalFilesDir (String type)

File getExternalStoragePublicDirectory (String type)

In the beginning, everyone used Environment.getExternalStorageDirectory() , which pointed to the root of phone’s internal memory. As a result, root directory was filled with random content.

Later, these two methods were added:

In Context class they added getExternalFilesDir(), pointing to an app-specific directory on phone’s internal memory. This directory and its contents will be deleted when the app is uninstalled.

Environment.getExternalStoragePublicDirectory() for centralized places to store well-known file types, like photos and movies. This directory and its contents will NOT be deleted when the app is uninstalled.

Methods to store in Removable Storage i.e. micro SD card

Before API level 19, there was no official way to store in SD card. But many could do it using unofficial APIs.

Officially, one method was introduced in Context class in API level 19 (Android version 4.4 — Kitkat).

File[] getExternalFilesDirs (String type)

It returns absolute paths to application-specific directories on all
shared/external storage devices where the application can place
persistent files it owns. These files are internal to the application,
and not typically visible to the user as media.

That means, it will return paths to both Micro SD card and Internal memory. Generally, second returned path would be storage path of micro SD card.

The Internal and External Storage terminology according to Google/official Android docs is quite different from what we think.

Тема не новая. Облазил множество сайтов. Но все примеры дают результаты на внутреннюю память. Никак не могу решить вопрос с определением пути к внешней SD карте. Мне нужен результат типа /storage/external_SD. Именно тут я хочу создать папку и скопировать в нее файл. Телефон LgD380 на 4 андроиде с root. основу приведенного ниже кода я взял с данного сайта. результат, возвращаемый программой — путь к firmware. Для простоты я вставил его в MainActivity.java:

public class MainActivity extends ActionBarActivity {
    TextView textInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String EXTERNAL_PATH = getSDcardPath() + "/";
    String EXTERNAL_PATH_REPLACE = EXTERNAL_PATH.replace("/mnt/media_rw", "/storage");
}

//Функция определяет путь до внешней извлекаемой карты
private String getSDcardPath() {
    String exts = Environment.getExternalStorageDirectory().getPath();///storage/emulated/0
    String sdCardPath = null;
    try {
        FileReader fr = new FileReader(new File("/proc/mounts"));
        //FileReader fr = new FileReader(new File("/mnt/sdcard"));
        BufferedReader br = new BufferedReader(fr);
        String line;
        while ((line = br.readLine()) != null) {
            if (line.contains("secure") || line.contains("asec"))
                continue;
            if (line.contains("fat")) {
                String[] pars = line.split("\s");
                if (pars.length < 2)
                    continue;
                if (pars[1].equals(exts))
                    continue;
                sdCardPath = pars[1];
                break;
            }
        }
        fr.close();
        br.close();
        return sdCardPath;
    } catch (Exception e) {
        //e.printStackTrace();
        textInfo.setText(e.toString());
    }
    return sdCardPath;
}

(см фото)
результат, возвращаемый программой - путь к firmware

задан 9 дек 2015 в 6:42

serjufa's user avatar

1

Ну так вроде бы Environment.getExternalStorageDirectory() и указывает на SD-карту.
Единственно, если устройство к компу подключили, то SD-карта не доступна для программы. Т.е. получить путь к SD-карте:

private String getSDcardPath() {
    return Environment.getExternalStorageDirectory().getPath()
}

Смотрите докуметнтацию getExternalStorageDirectory()

Проверить возможность работы с SD-картой можно как здесь описано:

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

pavlofff's user avatar

pavlofff

36.7k6 золотых знаков47 серебряных знаков121 бронзовый знак

ответ дан 9 дек 2015 в 8:07

hardsky's user avatar

hardskyhardsky

2,1391 золотой знак13 серебряных знаков21 бронзовый знак

3

Столкнулся с аналогичной проблемой — правда в немного иной трактовке: была необходимость определить подключена ли карта памяти, весь интернет завален бесполезным кодом, для себя нашел решение довольно простое — путь там также есть

String s = System.getenv("SECONDARY_STORAGE");
    if(s == null)
        Log.d("test", "sdcard not available");
    else
        Log.d("test", System.getenv("SECONDARY_STORAGE"));

ответ дан 8 мая 2017 в 11:50

Evgen Orlovsky's user avatar

Выбирая смартфон, человек уделяет внимание не только внешнему дизайну, количеству камер и качеству съемки, но и объему внутреннего накопителя. И все равно, в процессе активного использования мобильного девайса возникает катастрофический дефицит встроенной памяти, что неизменно вызывает желание увеличить ее любым способом. Если произвести чистку, избавившись от ненужных файлов и неактуальных приложений, не представляется возможным, остается один путь – установка карты памяти.

image

Как работает карта памяти

Карта памяти представляет собой физический носитель информации мини-формата. Она служит для хранения и передачи данных в любых мобильных устройствах, а после установки в смартфон способна увеличить внутреннее хранилище на определенное количество мегабайт.

Как ни странно, но сегодня возможность использования носителей типа MicroSD отсутствует практически на всех Apple-устройствах. Аналогичная практика стала применяться некоторыми производителями и в отношении флагманских версий Android. При этом во всех бюджетных моделях для установки дополнительной карточки имеются специальные слоты.

Установка съемной карточки в смартфон или планшет дает пользователю важное преимущество: он может использовать ее в качестве съемного носителя или внутреннего хранилища.

  • Первый вариант предполагает, что на карточке будут храниться обычные пользовательские файлы типа фотографий, видеороликов, музыкальных треков, которые можно переносить с одного устройства на другое неограниченное количество раз.
  • Второй вариант подразумевает, что карта будет привязана к одному смартфону и станет выполнять функции встроенной памяти. В этом случае на нее помимо обычных файлов можно устанавливать системные программы и приложения. Но при необходимости подключения к другим гаджетам данный носитель придется форматировать.

Основной характеристикой карты памяти является ее класс: он указан на поверхности в кружке. Цифра указывает на скорость передачи данных за единицу времени (секунду). Оптимальным считается 10 класс: такие карты в меру быстрые и, к тому же, стоят недорого. Чтобы карта служила долгое время, следует обращать внимание на фирму-производителя, и отдавать предпочтение известным маркам.

Как найти карту памяти в телефоне

Отыскать карту памяти в смартфоне или планшете достаточно легко. Для этого необходимо:

  • попасть в «Настройки» (через меню, панель быстрого доступа или на рабочем столе);
  • перейти в раздел «Память»;
  • выбрать вариант SD-карта.Где в телефоне находится карта памяти

Чтобы получить доступ к содержимому внешнего накопителя, понадобится использовать любой файловый менеджер. Он может быть встроен в функционал мобильного устройства по умолчанию либо установлен в процессе эксплуатации гаджета. Самым распространенным вариантом считается программа «Проводник». В смартфонах с чистым Android, используется диспетчер файлов «Google Files Go». Что потребуется сделать:

  • открыть приложение;
  • выбрать строку с названием «SD-карта» или что-то похожее, например «SDcard» или просто «Внешняя память»;
  • кликнуть по названию и перейти в раздел.

Здесь можно увидеть, какие документы и файлы хранятся на съемном носителе.

image

Как настроить карту памяти

Данная инструкция будет полезна тем, кто впервые устанавливает съемный носитель на своем гаджете. Следуя советам, понадобится:

  • Вставить карту памяти в специальный слот и включить устройство.
  • Когда появится сообщение о том, что обнаружен внешний накопитель, нужно тапнуть по нему.
  • Далее открыть блок «Настройки».
  • Перейти в раздел «Хранилище и USB-накопители».
  • В подразделе «Съемный накопитель» выбрать «SD-карта».
  • Перейдя на вкладку хранилища, вызвать меню в верхней части экрана и выбрать пункт «Настройки».image

Система предложит два варианта ее использования: в качестве внутренней памяти или съемного накопителя. Нужно будет подумать, и выбрать один из них.

Как отключить и достать карту памяти

Чтобы достать SD-карту из смартфона, понадобится выполнить действия, обратные установке. Однако одного физического извлечения в этом случае недостаточно. За время использования на съемный носитель было установлено немало файлов, доступ к которым имела как сама операционная система, так и различные приложения. Чтобы вынуть носитель без риска получения неприятных последствий, нужно воспользоваться следующей инструкцией.

Если в меню имеется функция безопасного извлечения

image

  • Пролистать экран вниз, чтобы найти вкладку «Портативный носитель».
  • Выбрать название карточки и запустить процесс извлечения с помощью стрелки справа.

Теперь нужно дождаться окончания операции, не пытаясь вынуть носитель из телефона. В течение нескольких минут карта должна полностью размонтироваться.

Если функция безопасного извлечения отсутствует

В этом случае алгоритм вообще предельно прост. Нужно отключить смартфон с помощью кнопки «Питание», и немного подождать, пока операционная система отключит связанные приложения и размонтирует саму карточку. После этого можно аккуратно вынуть носитель из слота. Чтобы не повредить носитель, целесообразно воспользоваться специальной скрепкой.

Где в телефоне находится карта памяти

Как отформатировать

Форматирование SD-карты – крайне важная процедура, к которой нужно подходить ответственно. Она полностью очищает хранилище, что приводит к потере имеющейся в ней информации. Чтобы избежать этого, целесообразно перенести медиафайлы и документы на другой носитель.

Чтобы выполнить формат, потребуется сделать следующее:

  • Открыть «Настройки» через меню телефона или панель быстрого доступа.
  • Перейти в раздел «Память».
  • Выбрать нужный вариант хранилища – «USB-накопитель».
  • Нажатием кнопки «Форматирование» запустить процесс очищения.

image

Аналогичную процедуру можно выполнить с помощью компьютера или ноутбука. Для этого понадобится:

  • Подключить к ПК смартфон или непосредственно карту памяти;
  • В папке «Мой компьютер» отыскать наименование устройства или носителя;
  • Правой кнопкой вызвать контекстное меню, в котором запустить опцию форматирования.

image

Возможные проблемы

Очень часто возникают ситуации, когда смартфону не удается обнаружить карту памяти. С подобной проблемой сталкиваются многие пользователи, поэтому она заслуживает детального рассмотрения.

Вячеслав

Вячеслав

Несколько лет работал в салонах сотовой связи двух крупных операторов. Хорошо разбираюсь в тарифах и вижу все подводные камни. Люблю гаджеты, особенно на Android.

Задать вопрос

Не удается установить SD-карту

Вячеслав

• убедиться, что устройство имеет слот для съемных носителей;
• проверить карту на наличие внешних дефектов;
• проконтролировать правильность установки – карточка должна плотно лежать в лотке, иначе он не сможет задвинуться.

После установки появляется сообщение, что телефон не видит USB-накопитель

Вячеслав

Подобная проблема может возникнуть по разным причинам:
• Данный тип карт не поддерживается операционной системой;
• Носитель имеет неправильный формат;
• Произошел системный сбой;
• Карта оказалась неисправной.
• Чтобы устранить ее, понадобится заменить карту, выбрать другой формат, устранить конфликт, возникший в системе.

Карту памяти не видит не только телефон, но также ПК

Вячеслав

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

Корневая папка сд карты. Где находится корневая папка флешки или карты памяти

Где находится корневая папка флешки или карты памяти?

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

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

    Корневая папка любого диска — это главная папка данного диска.

    То есть когда ты находишься в корневой папке какого-либо диска, для тебя это выглядит как будто ты не в какую папку и не заходил.

    То есть адрес корневой папки такой:

    диски A: и B: обычно зарезервированы под дискетные дисководы (для флоппи-дисков), которые в современных компьютерах часто уже и не ставят.

    для жсткого диска это обычно C:

    часто для DVD-проигрывателя резервируется D:

    Остальные обычно используются для подключаемых внешних устройств.

    Например для флешки.

    Но это, по-моему, не обязательно они должны быть в таком порядке. У кого-то в компьютере может быть и другой порядок соответствия устройств наименованиям дисков. Войдите в раздел Мой компьютер
    (если у вас Windows) и вы увидите как это расположено у вас.

    Корневая папка сайта имеет такой адрес: http://sitename/

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

    Корневой считается папка самой флешки, или программы, или диска. То есть там могут находится и другие (подпапки). То есть корневая значит изначальная. И если например указывается, что допустим какой — либо файл надо перетащить в корневой каталог флешки, то нужно просто разместить его на саму флешку, а не в какую — то другую папку на этой флешке. И также по аналогии с другими ресурсами.

    Что же такое корневая папка и как туда попасть?

    На самом деле все очень просто, корневая папка — это папка которая считается изначальной. Если вы к примеру подключите вашу флешку в устройству, то вам выскочит меню, через которое вы можете зайти в корневую папку = это и есть сама флешка, в которой могут быть как папки так и файлы.

    Довольно часто можно услышать или встретить фразу: установите/переместите/скопируйте определенный файл в корень карты памяти или в корневую папку флеш-карты. А что же такое и где находится корневая папка или просто корень флешки?

    Ответ на самом деле очень прост. Такое название пошло от корневой директории. То есть, когда нажимаем на значок карты памяти/флеш-карты и перед нами открывается окно — это и есть та самая корневая папка. Хотя фактически папку мы там не видим. Это сама область карты с помещенными на ней другими файлами и прочими папками. Корневую папку (или корень) флешки можно сравнить с верхним этажом в иерархии всех папок на ней.

1. Загрузить в устройстово установочный файл SAS4Android.apk

2. Включить на своём устройстве (телефоне, планшете и пр.) разрешение на установку сторонних приложений (не из Маркета). Это можно сделать в настройках своего устройства: Настройки — Безопасность — Неизвестные источники
– установить галочку Разрешить установку приложений из неизвестных источников
(после установки SAS4Android эту галочку можно снять). Скопируйте файл SAS4Android.apk

на своё устройство и запустите его установку.

3. Запустить файл SAS4Android.apk

.

4. При первом запуске появляется окно с запросом пути до корня CD карты и согласием с условием использования. Нажать ОК.
Также при первом запуске автоматически создается рабочая папка приложения — SAS4Android

и в ней папка work .

Это рабочая папка программы, в которой будут сохраняться необходимые данные. Обратите внимание, что нужно указать путь именно до корня
SD-карты (а не до какой-либо другой папки) – это важно!

По умолчанию структура папок программы такова:

корень_SD-карты/SAS4Android/work

— рабочая папка — создается автоматически;

корень_SD-карты/SAS4Android/cache

— папка с кэшем — создается пользователем.

Если используется структура папок по умолчанию, программа автоматически определяет пути к нужным папкам и файлам. Если используется другая структура папок, пути необходимо указывать вручную. В устройствах с версией Android до 4.3.x рекомендуется использовать именно структуру папок по умолчанию.

Определить путь до карточки можно следующим способом: Перед тем, как вставлять SD-карту в устройство, создайте (на компьютере) на ней папку с понятным вам
названием, например имя
.
Отключите устройство от компьютера, иначе SD-карта в режиме накопителя не будет доступна для Андроида и всех программ. (Удобнее пользоваться для связи с компьютером программой MyPhoneExplorer, которая позволяет редактировать информацию на устройстве через компьютер иSD-карта остаётся доступной для всех). Откройте любой файловый менеджер на устройстве и войдите в самую корневую
директорию устройства. Там будет несколько директорий. Просматривая их содержимое, найдите в одной из них «свою» папку. Путь, который показывает файловый менеджер до корня
этой директории, и есть то, что нужно. Запомните или запишите его. В разных устройствах и и версиях Андроида возможны и разные варианты размещения и названия папки SD-карты. При наличии папки mnt

нпример mnt/sdkard

, или mnt/external_sd

, или mnt/extSdkard

. На некоторых устройствах папки mnt

может и не быть. В таком случае папка, смонтированная на карточку, обычно лежит прямо в корне устройства, например так: /Sdkard

или /Sdkard1

или /extSdkard

. На Андроидах версий 4. и выше, обычно встречается такая папка: storage/Sdkard

или storage/Sdkard1

или storage/external_sd

или storage/extSdkard

.
Итак, пусть мы определили, что SD-карта у нас смонтирована как /mnt/external

. Вот именно такой путь надо ввести (а лучше выбрать, открыв файловый диалог кнопкой […]) при первом запуске программы до появления меню.

Особенности запуска на Андроид 4.4 и выше

На Андроиде 4.4 и выше права приложения на запись на SD-карту убрали. Если производитель не подправил прошивку при сборке, то приложение на нерутованом аппарате писать на SD-карту не сможет. В этом случае программа сама попытается найти, где разместить рабочую директорию. Скорее всего это будет директория в разделе данных приложения во внутренней памяти (некопителе) устройства.
При этом программа будет работать, данные будут записываться в папку work

, считываться оттуда. Но пользователь будет лишён возможности взять что-либо из папки work

или что-либо положить туда. Разумеется, речь идёт о нерутованном устройстве. Если такое состояние дел устраивает пользователя, то больше ничего делать не нужно. В противном случае придётся поработать руками.
Нужно найти такое место на устройстве, в которое и программа сможет записывать данные, и мы сможем эти данные оттуда брать и добавлять свои в случае необходимости.
Экспериментальным путём удалось отыскать такое место. Порядок действий по установке:

1.
Подключаем устройство USB кабелем к компьютеру и создаём в директории внутреннего накопителя
папку Data

. Или в самом устройстве делаем то же самое с помощью файлового менеджера. Путь должен быть storage/sdcard0/Data

. В папку Data

укладываем файл .nomedia

.
Внимание!

Все попытки создать папку work
(видимую и редактируемую на компьютере) в других местах/папках внутренней памяти безуспешны
. Создать можно, и даже при первом запуске SAS4Android можно указать путь до желаемой папки. Но после установки доступ к данной папке становится невозможным. Через файловый менеджер устройства посмотреть можно, а вот добавить что-нибудь (треки, новый ключ лицензии, конфиги карт/слоев и т. д.) из съёмной карты или компьютера, а также скопировать на съёмную карту или компьютер — невозможно.

Почему для папки выбрано имя «Data»

? Хитрость заключается в том, что оно совпадает с именем Data

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

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

Теперь созданная нами папка storage/sdcard0/Data

будет выполнять роль , путь к которому нужно указывать при первом запуске программы.
2.
Создаём в корне внешней
SD-карты папку SAS4Android

, а в этой папке – папку cache

. Туда укладываем кэш. Путь к кэшу будет
.
3.
При первом запуске программа запросит путь к корню SD-карты. Указываем путь к созданной нами папке: storage/sdcard0/Data

. В папке Data

программа создаст папку SAS4Android

, а в ней папку work

со стандартным базовым набором файлов. Теперь все рабочие файлы программы будут размещаться в папке storage/sdcard0/Data/SAS4Android/work

, и мы будем иметь доступ к ним.
4.
Теперь необходимо указать программе путь к кэшу, так как он у нас отличается от пути по умолчанию. Для этого в запущенной программе входим в Настройки
Директория кэша карт
и с помощью файлового диалога указываем путь storage/sdcard1/SAS4Android/cache

.Установка завершена.
#!!!
Многочисленные проверки показали, что при такой установке SAS4Android в устройства под Android 4.4.4, при дальнейших обновлениях или даже полном удалении и переустановке приложения директория storage/sdcard0/Data

остаётся рабочей, содержимое work

не теряется и не ломается, доступ к редактированию work

как через устройство, так и через компьютер открыт. Проверено на Sony Xperia Z, а также Z3 compact и WinXP/ Win7.
#!!!
В том, что рабочая директория work

вынужденно оказывается на внутренней памяти устройства, есть один существенный плюс – в случае глюка/отваливания SD-карты в полевых условиях, а это может произойти с каждым, вы лишаетесь (временно) только кэша, а треклог и остальное содержимое work

останется целым и работающим.
Совет

: всегда полезно иметь крайний резерв — периодически, после появления важных новых треков и точек, копирую/сохраняю этот изменённый рабочий work

на SD-карту в родную папку SAS4Android, рядом с cache

. Там work
, естественно,не работает- это просто сохранёнка. А вдруг зверь глюкнет — тогда карточка выручит по поводу частичного восстановления.

#!!!
В Android 4.4.x (если производитель не подправил прошивку при сборке) он лайн подкачка

данных картографии в неупакованный кэш из сторонних сервисов с помощью скриптов, написанных на JavaScript, без рута

возможна только во
внутреннюю память. Для загрузки кэша он лайн


потребуется дополнительно создать вторуб папку cache


в рабочей директории программы storage/sdcard0/Data/SAS4Android/

и заранее уложить в неё требуемое количество папок с именами источников карт/слоев и с размещенными в них скриптами. Придется привыкать к переключениями между двумя директориями кэша в зависимости от текущих потребностей: для работы без подкачки — с основным cache

, а с подкачкой — переключаемся на cache


во внутренней памяти.

Выход в меню настроек программы.

После запуска программы выход в меню настроек осуществляется нажатием на системную кнопку “Меню”. Это может быть как аппаратная кнопка так и экранная кнопка в нижней части экрана (три вертикальные точки
). В зависимости от вашего аппарата и версии Андроида на нем, это может быть либо аппаратная, либо экранная кнопка в нижней части экрана. На многих новых аппаратах с Андроидом версий 4 и выше эта кнопка совмещена с кнопкой списка запущенных приложений (два совмещенных прямоугольничка
). В этом случае для выхода в меню достаточно нажать и удерживать нажатой
кнопку запущенных приложений до появления меню настроек.

Особенности включения и выключения SAS4Android

При запуске программы включаются все режимы: отображение карт, навигация, запись трек лога (запуск сервиса). Имеется возможность выйти из приложения (перевести в спящий режим) без остановки сервиса, т.е. записи трек лога. В зависимости от настроек (режим записи трек лога, режим остановки сервиса) при необходимости запустить какую либо другую программу, позвонить или ответить на звонок при сохранении работающего сервиса следует использовать либо кнопку back
, либо кнопку «домой» в виде домика.

Для остановки сервиса, в зависиммости от настроек, использовать двойной клик на кнопку «Назад», либо опустить «шторку», в списке запущенных приложений кликнуть по строке SAS4Android
, нажать на кнопку Остановить.

#!!!
В планшетах чаще всего статусная строка находится внизу. В её правой части группируются значки запущенных приложений. Если кликнуть по любому значку, то всплывет окно с линейкой со значками «Быстрых параметров» (звук, яркость WiFi, БТ, сеть, местоположение и т.п.), а ниже построчный список запущенных приложений.

Особенности распространения прораммы

Программа SAS4Android

распространяется бесплатно.

Ограничение срока работы приложения — примечание автора.

После многократного и злостного нарушения авторских прав некоторыми нечистыми на руку торговцами навигаторами автору пришлось ввести ограничение — после установки (или очередного обновления) программа SAS4Android

исправно работает в течение 1 месяца от даты выкладывания апдейта, а затем частично «ломается» — протухает
. Выражается это в сокращении времени непрерывной записи треклога (обычно в пределях 20-30 мин) после чего запись прекращается, на экране появляется соответствующее сообщение. Далее остается только перезагрузить программу (закрыть приложение и сервис и заппустить их снова). И так непредсказуемое число раз до окончания путешествия. Треки при этом записываются, но с разрывами. Простое, но хлопотное решение данной проблемы — регулярное, 1 раз в месяц, обновление. Каждый новый апдейт имеет более позднюю дату «протухания», так что обновитесь и вперёд…

Но есть способ лучше.

В программе заложен алгоритм снятия ограничения — ключ license.dat, отключающий «протухание». Автор дарит ключи в знак благодарности поддержавшим проект. Так что не спрашивайте «сколько стоит» и «как купить». Зайдите на любую страницу форума и внимательно посмотрите в «шапку».

Ключи не продаются! Пожертвования с любыми упоминаниями о ключах или покупке в комментариях будут возвращены отправителям.

Для генераци ключа необходим файл deviceld.txt

. Он формируется самой програмой SAS4Android и помещается в папку work

.

Проверьте для начала, что на Вашем устройстве файл deviceld.txt

есть.

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

Если у Вас файл deviceld.txt

пустой или не рабочий (остался от старой версии программы до сброса заводских настроек или обновления системы).

1. Удаляем старый deviceld.txt

.

2. Запускаем программу.

3. Ждем, пока словит спутники (строка координат станет черной).

4. Закрываем программу. Действующий идентификатор должен появиться в папке work

.

Обратите внимание на тот факт
, что ключ привязан к идентификатору устройства. На Андроиде при установке обновления системы изменяется идентификатор устройства. К этому же приводит сброс до заводских настроек. (Почему так? Спросите у производителей Вашего устройства).

Так что, если Вы обновите систему или сделаете сброс до заводских настроек, то ключ работать перестанет.

Тем не менее, и это решаемо заменой ключа. Все вопросы про снятие ограничений задавайте в личку автору программы.

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

Происхождение и значение корня карты памятиРазличную информацию в электронном виде можно сохранять на специальном устройстве, называемом картой памяти.

Она предназначена для хранения текстовых документов, аудио и видеозаписей, изображений. Основное преимущество этого типа памяти заключается в простоте записи информации и компактности устройства наряду со значительными объемами сохраняемых данных.Внутренняя память представлена оперативной, постоянной и кэш-памятью. К ее плюсам относят быстродействие, а минусом является ограниченный объем сохраняемых данных.Очень часто современному пользователю персонального компьютера и прочей электронной техники приходится сталкиваться с таким предложением: «установить в корень карты памяти» или «скопировать в корень карточки». Оно может встретиться где угодно, так как современная техника все в большем объеме начинает поддерживать сторонние карты для увеличения внутренней памяти.Карты памяти стандартизированы. Они имеют определенные габаритные размеры и расположение площадок контактов в зависимости от типа устройств, для использования на которых они предназначаются. Сюда относятся ноутбуки, планшеты, смартфоны, цифровые фотоаппараты и даже PSP с прочими игровыми приставками. Поэтому для корректной работы с ними не обойтись без четкого представления о том, что может значить выражение «корень карты памяти» и где он может находиться.Название места для сохранения данных на карточке происходит от английского слова root – «коренной, корень», обозначающего что-то первозданное, исконное. Оно вошло в употребление еще в самом начале, когда только стали появляться компьютеры. На них root-ом называли само содержание устройства, то есть то место, откуда запускалась система, и где можно было сохранять данные. По сути, в отношении нынешних карт памяти данное обозначение ничуть не изменилось. Корневой каталогСегодня корнем карты памяти называют именно сам каталог, который размещен на карточке. Это та самая папка, которая запускается при нажатии на иконку с карточкой памяти в смартфоне или нетбуке. Просто слово root было переведено дословно, и теперь используется именно его русский аналог для обозначения самой карты. Таким образом, если вас просят скопировать данные в корень, то вам не нужно создавать ничего дополнительного на карте памяти, а просто скопировать нужные файлы на нее саму, в корневой каталог.

Думаю, что все сталкивались с проблемой злобных «авторанов». И есть много способов решения: СПО, скрипты, «танцы с бубном» и т.п. Я же хочу предложить простой алгоритм решения для пользователей OS Windows, который не требует сторонних вмешательств. Для достижения цели нам потребуется несколько шагов — точнее два.

Шаг №1 — подготовка

Форматирование файловой системы носителя в NTFS с помощью ОС.

При выборе вариантов форматирования нет NTFS

Если нет варианта форматирования файловой системы в NTFS, что имеет место быть на Windows XP, то делаем следующее:

  1. Заходим в свойства флешки;
  2. Переходим на вкладку «Оборудование;»
  3. Выбираем нашу флеш-карту и нажимаем кнопку свойства;
  4. Переходим на вкладку «Политика»;
  5. Выбираем вариант использования кэша;
  6. Принимаем изменения и форматируем в NTFS;
  7. Затем возвращаем обратно в «Быстрое удаление».

Шаг №2 — разграничение прав

Теперь создаем папку («рабочая папка») в корне и сразу задаем имя (в дальнейшем поменять имя папки невозможно), в ней и будет храниться вся информация. А вот в корень папки будет доступен только на чтение. Теперь разграничиваем права:

  1. Заходим в безопасность — открываем свойства флешки, вкладка «Безопасность»;

    Если нет такой вкладки, то делаем следующее

    1. Заходим в «Параметры папок», что в «Панели управления»;
    2. На вкладке вид в списке «Дополнительные параметры» находим параметр содержащий слова «общий доступ» и «(рекомендуется)»;
    3. Снимаем галку.

    Теперь вкладка появилась

  2. Нажимаем кнопку «Дополнительно»;
  3. В открывшемся окне переходим на вкладку «Владелец» и нажимаем кнопку «Изменить»;

    Для XP

  4. Ставим галку «Заменить владельца подконтейнеров и объектов»;
  5. Выбираем себя и становимся владельцем объекта;
  6. Закрываем диалоговые окна по требованию ОС кнопкой «ОК» и затем опять открываем «безопасность» и «дополнительно»;
  7. Изменяем разрешения — для этого заходим в безопасность и на вкладке «Разрешения» нажимаем кнопку «Изменить разрешения» удаляем имеющиеся права;

    Для XP

    (в Windows XP нет кнопки «Изменить разрешения», там сразу действуем)

  8. Добавляем группу «Все» — нажимаем кнопки «Добавить», «Дополнительно», «Поиск», выбираем из списка группу «Все», «ОК», «ОК»;
  9. В открывшемся окне задаем параметры разрешений для группы «Все»:
    • «Применять: Для этой папки, ее подпапок и файлов»;
    • Устанавливаем следующие галки в поле «Разрешения»:
      1. Разрешить: «Полный доступ»;
      2. Запретить: «Смена владельца», «Смена разрешений», «Удаление», «Удаление подпапок и файлов», «Запись дополнительных атрибутов», «Запись атрибутов», «Создание папок / дозапись данных», «Создание файлов / запись данных».
  10. Принимаем изменения, переходим к ранее созданной папке в корне флеш-карты и проделываем почти те же операции;
  11. Смена владельца — по знакомой схеме;
  12. Удаление имеющихся прав путем снятия галки «Добавить разрешения, наследуемые от родительских объектов» на вкладке «Разрешения»;
  13. В появившемся диалоговом окне выбираем «Удалить»;
  14. Добавляем группу «Все» (уже знаем как) и задаем параметры разрешений:
    • «Применять: Для этой папки, ее подпапок и файлов» ;
    • Устанавливаем галку Разрешить: «Полный доступ».
  15. Опять добавляем группу «Все» и задаем параметры разрешений:
    • «Применять: Только для этой папки»;
    • Устанавливаем следующие галки «Запретить» в поле «Разрешения»:
      «Смена владельца», «Смена разрешений», «Удаление», «Запись дополнительных атрибутов», «Запись атрибутов»
Плюсы

+ В корне флеш-карты нет возможности создавать / удалять файлы и папки. Следовательно, закрыта лазейка для «авторанов».
+ В «рабочей папке» полный доступ — что хотим, то и воротим (ударение расставите сами).
+ Файловая система NFTS — для личного пользования в самый раз. (ИМХО)

Минусы

— Нет возможности воспользоваться пунктом меню «Отправить» для копирования информации на нашу флешку, т.к. корневой каталог закрыт для записи. Необходимо копировать в «рабочую папку».
— Нет возможности переименовать «рабочую папку» — в корне только чтение.
— Файловая система NTFS — не подходит для устройств читающих только FAT (муз./видео плееры, смартфоны, фото-камеры и т.п.).

Замечания
  • Данную операцию лучше проводить на «здоровой машине». А то можно сотворить immortal-autorun;
  • НА Windows XP у меня при попытке удалить «рабочую папку» она оставалась (так и должно быть), но внутри всё удалялось;
  • Зато на Window 7 все файлы при попытке удаления «рабочей папки» остаются;
  • Внутри «рабочей папки» не спасает от вредоносных программ, которые создают exe»шник с именем папки при ее открытии.

Понравилась статья? Поделить с друзьями:
  • Ошибка фн 235 эвотор как исправить на кассе самостоятельно
  • Как найти вероятность события на диаграмме эйлера
  • Как найти большую часть диагонали трапеции
  • 0x00028002 как исправить
  • Как найти средство от кашля