Я купил новый телефон Samsung Galaxy S5, и сразу столкнулся с проблемой в операционной системе Android. А точнее, версии Андроид 4.4 KitKat. В этой версии Андроид введена новая фишка разработчиков Google.
Теперь приложениям запрещен доступ к редактированию файлов на SD карте! Это приводит к тому, что некоторые приложения неработоспособны!
Я расскажу вам, как обойти эту проблему!
Добрый день, уважаемые читатели нашего блога!
На днях я купил себе новый телефон! Samsung Galaxy S5!
Поздравляю себя с удачной покупкой, о которой мечтал несколько лет! Телефон оказался замечательно быстрым, мощным, красивым и удобным!
Ранее у меня уже был телефон HTC (ему уже около 4-5 лет) с Андроид системой. Один из первых телефонов с такой системой (на момент покупки). Я его изучил вдоль и поперек, перепрошивал систему несколько раз, выбрал прошивку Андроид, которая по функционалу много превосходила на тот момент официальную.
Для тех, кто не в курсе, перепрошивка — это замена операционной системы телефона. Ну примерно как переустановка Windows на компьютере.
Прошло много времени, вышло много версий Андроид (на момент покупки у меня была Андроид 2.2). Новые версии и телефоны, на которых они устанавливались, много превосходят мой старенький смартфон. Поэтому я был сильно удивлен мощью, быстротой и функциональностью.
Наслаждался я около 4 суток. Затем наткнулся на проблему!
После очередного обновления, операционная система телефона сама обновилась до версии Андроид 4.4
Каково же было мое удивление, когда я не смог отредактировать ни один файл на собственном телефоне! Сначала я грешил на глюки, проверил в разных папках, попробовал отредактировать файл с компьютера (подсоединив кабель к телефону). Никаким способом не получалось редактировать файлы!
Посмотрев информацию об операционной системе в Настройки — Об устройстве — Состояние SE для Android я увидел слово Enforcing.
Это кодовое слово Google означает версию Андроид, где на уровне ядра операционной системы ограничены права приложений! ЕМАЕ! Ну я попал!
Вот, что я обнаружил:
Х очу заметить, что мой телефон совсем новый, с гарантией от производителя на 5 лет!
Если получитьRoot-доступ (администраторские права в системе Андроид), то гарантия от производителя (Samsung) исчезает. По правде сказать, некоторые хакерские сайты утверждают, что есть специальные методы вернуть заводской счетчик к первоначальному положению. Заводской счетчик при получании Root-доступа обнуляется. Это показывает обслуживающей компании о том, что телефон был взломан, и гарантия на него не распространяется.
Чтобы повлиять на этот счетчик, нужно разобрать телефон и залезть в микросхемы. Поэтому не ведитесь на такие обманы!
Если вы получите Root-доступ, то гарантия у вас исчезнет! Проверено на своем старом телефоне!
В новой версии Андроид 5.0 Google использует другую логику запрета на доступ к внешним SD-картам памяти.
Приложения устанавливаются в систему в скомпилированном виде. То есть в виде, готовом к запуску. Это увеличивает быстродействие, многозадачность и уменьшает расход батареи.
Иными словами, ранее в системе были файлы дистрибутивов (установочные файлы) и система, при запуске приложения, компилировала его, перед запуском. Иными словами, файлы были запакованные, во время запуска приложения, файлы распаковывались и запускались.
Теперь, в Андроид 5.0, все приложения устанавливаются в скомпилированном, разархивированном виде. Это приводит к тому, что приложения расходуют больше места, но быстрее выполняются!
Если я обновлю ОФИЦИАЛЬНО версию операционной системы, то я СОХРАНЮ ГАРАНТИЮ!
Но мне нужна версия Андроид для России (именно для нее, а не для другой страны), чтобы не мучиться с английскими словами в интерфейсе.
Попытаюсь найти ее.
Официальная программа поддержки Samsung телефонов Kies говорит, что мой телефон обновлен до последней версии По.
Официальных обновлений Андроид (для нашего региона) я не нашел на официальных сайтах.
На форумах я нашел информацию, что Google выпустила версию прошивки для России в январе 2015. Но очень медленно внедряется на аппараты клиентов.
Таким образом, я могу подождать, пока на мой аппарат не поступит сообщение о том, что есть обновление По. После этого я смогу обновить Андроид.
Можно, не дожидаясь приглашения, самому прошить на новую прошивку.
После того, как я решил дождаться официального обновления, стал рыться в файловой системе на телефоне. И обнаружил странное:
И мне сразу пришел рабочий способ изменения файла с помощью промежуточной копии! Системный анализ в действии...
То есть что мы делаем:
Таким образом мы получаем измененный файл (с помощью промежуточной копии)!
Вот такие дела, товарищи!
Будут новости, сразу отпишусь!
А теперь пока, до скорого!
Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом.
Итак, начнем с теории.
До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.
В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.
Public enum MountDeviceType {
EXTERNAL_SD_CARD, REMOVABLE_SD_CARD
}
И был создан класс StorageHelper
, который и осуществляет поиск доступных карт памяти.
В классе StorageHelper реализовано два способа поиска - через системное окружение (Environment ) и с использованием утилиты Linux mount , а точнее результата ее выполнения.
Внешняя память всегда одна и обычно всегда есть, поэтому проверяем ее на читаемость, вычисляем хэш и запоминаем. Удаляемой памяти может быть много, поэтому необходимо полученную строку разбить по разделителю и проверять каждое значение.
Функция 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);
}
}
Вернемся к утилите 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,
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 + "\n");
testAndAdd(columns,
MountDeviceType.EXTERNAL_SD_CARD);
}
}
}
} finally {
...
}
} catch (Exception e) {
...
}
Исходный код всего класса расположен еще нигде не расположен. На днях постараюсь разместить на gitHub.
Кто еще какими способами пользуется?
Теги:
Давайте поговорим о том, как снять защиту записи с SD-карты памяти на Android. Многие люди сталкиваются с этой проблемой, когда пытаются скопировать или переместить файлы на SD карту. В этой статье вы найдете несколько способов как снять защиту записи Android.
Если при попытке скопировать файлы или форматировать SD-карту вы получаете ошибку, как на изображении выше, тогда знайте, это не ваша проблема. Более того, карта памяти не повреждена и не заражена вирусом, просто на ней установлена защита от записи. Без лишней суматохи мы рассмотрим несколько методов как снять защиту записи Android.
Большинство проблем и ошибок легко решаются с помощью реестра. Также мы можем использовать его, чтобы снять защиту записи Android.
Этот способ помогает в большинстве случае, но, если по какой-либо причине вы не можете его использовать, тогда попробуйте следующие методы.
Если и этот способ не помог снять защиту записи Android, не отчаивайтесь, у нас есть еще парочка решений этой проблемы.
Этот способ позволит снять защиту записи Android.
Кроме того, вы можете внимательно посмотреть на свою SD-карту, чтобы найти кнопку блокировки. Если она есть, просто переключите ее. Кнопка блокировки используется для защиты данных от удаления или полного форматирования карты памяти.
Надеемся, вам удалось снять защиту записи Android. Если у вас остались вопросы, пожалуйста, напишите в комментариях ниже.
С обновлением до пользователи получили ряд ограничений на использование SD карт. Решить эту проблему до недавних пор можно было при помощи кастомной прошивки или отката к более ранней версии ОС. Теперь же былые возможности можно вернуть и на Android 4.4 KitKat . О том, как это сделать, читайте далее.
Прежде всего, вам потребуется получить root-права для своего Android устройства. Второе важное условие – это приложение SDFix . Скачать приложение на Андроид бесплатно можно прямиком с . Для этого воспользуйтесь ссылкой, указанной далее.
Установив SDFix на свой Android , вы в несколько тапов восстановите былые возможности. Принцип работы приложения заключается в том, что SDFix добавляет Android UNIX группу "media_rw" к WRITE_EXTERNAL_STORAGE , таким образом, используемый в Android 4.4 KitKat XML файл меняется на platform.xml . При этом создается резервная копия изначальной настройки platform.xml.original-pre-sdfix , которую можно использовать для восстановления ограничений. Чтобы вернуть систему к стоковому состоянию, необходимо воспользоваться проводником с поддержкой root-доступа и заменить platform.xml на platform.xml.original-pre-sdfix.
Отдельно необходимо отметить, что приложения, которые используют SD, получат более низкий уровень безопасности. Также важным является тот факт, что SDFix приводит к перманентным изменениям, а это означает, что после восстановления старых полномочий приложение можно удалить.
Свершилось! На планшет, а именно, на Asus MeMO Pad 7, который я на замену своему честному трудяге, прилетело обновление до Android 5.0.1. Теперь у меня есть устройство с Леденцом, или, как пишут в интернете, с Лолипопой.
Обнова прилетела несколько неожиданно. Если честно, я ждал в апреле новую прошивку на телефон (Asus ZenFone 5) - ее, по крайней мере, обещали. Про планшет же никто ничего не говорил и тут - на тебе, получите и распишитесь.
Это, на самом деле, обескуражило меня (в хорошем, конечно, смысле), еще и потому, что планшет я приобрел в декабре, и на нем стояла версия 4.3. То есть, это второй существенный апдейт операционной системы (на самом деле, обнов было больше, но номер версии Android не менялся). Предыдущий производитель моих устройств - Samsung - не мог похвастаться такой скорострельностью, хотя, тоже дважды обновлял операционку: с Android 3.2 до Android 4.1.2 (через 4.0.1). Только вот ждать этих новых версий приходилось значительно дольше.
Что ж, да здравствуют сюрпризы! Получив уведомление о выходе новой версии прошивки, я тут же скачал ее, а это больше 700 метров, и запустил обновление. Так как качал я не через домашнюю сеть , а через мобильную, то времени на все про все потребовалось чуть больше: от начала загрузки до завершения обновления прошло около часа. Само обновление длилось где-то минут двадцать, но, потенциально, может занимать и больше времени - потому, что после установки операционки следует процесс обновления установленных программ. У меня счетчик досчитал до 205. Но вот, процесс завершился и настало время посмотреть, что же изменилось.
Первое, что бросилось в глаза - более утонченная графика при разблокировке устройства. Второе - рука в области уведомлений. Пару дней я ее терпел, надеясь на то, что случайно где-нибудь увижу что-нибудь, связанное с ней. Не увидел. Тогда стал искать целенаправленно и нашел разъяснение по ней на 4pda . Оказывается, оповещения поделили на важные и не очень, и есть возможность указать, какие оповещения вы хотите получать. Если выставить опцию Оповещать всегда , то рука пропадает, если опцию Только важные оповещения , то рука появляется. Если честно, руку я убирал несколько раз, но, почему-то, она стабильно возвращается. Почему? Пока не знаю.
Вот, собственно, сама процедура по "убиранию" этой руки:
Метод, приведенный выше, совершенно не сложен. Но можно добиться результата еще быстрее и проще: нажать на какую-то из двух кнопок управления громкостью - на экране появится окошко, позволяющее изменять уровни громкости для различных компонентов системы, а также, внимание, управлять Режимами оповещения . Правда, почему-то, эти самые Режимы оповещения выводятся в таком быстром варианте не всегда. Закономерности я пока не нашел, но, если честно, не больно-то и искал.
Официальных обновлений Андроид (для нашего региона) я не нашел на официальных сайтах.
На форумах я нашел информацию, что Google выпустила версию прошивки для России в январе 2015. Но очень медленно внедряется на аппараты клиентов.
Таким образом, я могу подождать, пока на мой аппарат не поступит сообщение о том, что есть обновление По. После этого я смогу обновить Андроид.