Читаем/записываем файл в Андроиде без запроса пермишинсов
Я решил написать еще одну статью об элементарных для опытного разработчика вещах, но вызывающих проблемы у новичков. Если погуглить вопрос как прочитать файл, то в основном попадуться старые статьи с советом, что Вам нужно запросить разрешение.
Этот подход нормально работал до появления Андроид 11. Потом с помощью специального костыля можно было какое то время жить по старому.
Совсем упертые могут попробывать доказать модерации, что Вам нужен
android.permission.MANAGE_EXTERNAL_STORAGE
Ребят я скажу только одну фразу, после которой все станет на свои места:
В андроиде нет файлов.
Загорелось меня поправить ? Готовы привести кучу примеров почему я не прав. Подождите. Поясню.
1. Забудьте о том как это работает в Windows/Unix (имя и путь к файлу). Фактически нам не нужно для чтения данных фактическое месторасположение файла и его наименование.
static String readTxtFile(InputStream inputStream) < BufferedReader br = null; StringBuilder sb = new StringBuilder(); String line; try < br = new BufferedReader(new InputStreamReader(inputStream)); while ((line = br.readLine()) != null) < sb.append(line).append("\n"); >> catch (Exception e) < e.printStackTrace(); >finally < if (br != null) < try < br.close(); >catch (IOException e) < e.printStackTrace(); >> > return sb.toString(); >
Данные мы читаем из потока, который получаем:
getContentResolver().openInputStream(p)
где p — Uri — Универсальный идентификатор ресурса. Файл — это частный случай uri.
2. В адроиде отказались от схемы file: . Взамен ее используется content:
При взаимодействие программ между собой в андроиде используются контент провадеры.
Современный подход получить нужный uri очень просто:
mGetContent.launch("*/*");
Предварительно мы обявляем активитилаунчер и используем готовый хелпер для нужного действия, и указание на метод обработки полученного результата:
private final ActivityResultLauncher mGetContent = registerForActivityResult( new ActivityResultContracts.GetContent(), this::fileSelected );
Это рекомендуемая сейчас замена для activityStartForResult (депрекейтед).
Таким образом для чтения любого файла нам не потребавалось никаких дополнительных разрешений. Доступ к файлу нам предоставил файловый менеджер смартфона.
После неявного вызова ACTION_GET_CONTENT, мы получили URI контента вместе с разрешением его прочитать.
Аналогично для записи:
private final ActivityResultLauncher mSaveContent = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), this::saveSelected );
только нужный интент проще собрать ручками:
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TITLE, cTime+".txt");
На гитхабе в качестве примера выложен Очень Простой Редактор 🙂
Не могу изменить системные файлы android в папке «/»
Помогите пожалуйста разобраться с проблемой. Версия андроида 4.2. Не могу изменить системные текстовые файлы в папке «/». Root-доступ на устройстве сделал, раздел на запись перемонтировал, права на файл выставил (rw-). Изменяю файл он сохраняется, но после перезагрузки планшета изменения пропадают, файл становится таким какой был исходный. Что я не так делаю?
Перемещено beastie из general
RedRay
03.01.14 21:20:54 MSK
Что ты там править-то собрался? В маркете есть приложения, например Sysctl Config — они правят.
ziemin ★★
( 03.01.14 21:30:25 MSK )
вот например про default.prop. немного не в тему но там упоминается почему
http://nesoc.ru/content/pro-production-build-i-root-chast-1
pkurg ★★★★
( 03.01.14 21:34:03 MSK )
Последнее исправление: pkurg 03.01.14 21:43:17 MSK (всего исправлений: 2)
Ты всё делаешь так, но у Android немного другая идеология разделов. В процессе загрузки в initrd не выполняется смена корневой ФС, она так и остаётся из initrd. Функции rootfs у Android выполняет /system.
Единственный способ поменять что-то в корневой ФС — изменить и прошить заново boot.img.
i-rinat ★★★★★
( 03.01.14 21:59:59 MSK )
Ответ на: комментарий от ziemin 03.01.14 21:30:25 MSK
В моём планшетнике есть неотключаемая вибрация при нажатии на любые кнопки, это бесит. Хочу программно умертвить вибратор, нашел в конфигах место где он активируется и хочу эту строчку закоментировать.
RedRay
( 03.01.14 23:33:56 MSK ) автор топика
Ответ на: комментарий от RedRay 03.01.14 23:33:56 MSK
Ты ведь понимаешь что этого не достаточно, чтобы тебе помочь.
pkurg ★★★★
( 03.01.14 23:38:24 MSK )
Ответ на: комментарий от pkurg 03.01.14 23:38:24 MSK
Да я уже понял, что недостаточно. Нашел в интернете мануалы по правке boot.img, распаковал его, там был образ ядра и зазипованный рамдиск, распаковал рамдиск там был этот конфиг, изменил нужные строчки, запаковал обратно, засунул изменённый файл в прошивку, прошил, планшет отказывается запускаться. Попробовал залить изменённый образ через adb и fastboot та же история. Может там прошивка как-то к железу привязана?
RedRay
( 04.01.14 21:31:02 MSK ) автор топика
Ответ на: комментарий от RedRay 04.01.14 21:31:02 MSK
Может там прошивка как-то к железу привязана?
может, а может к контрольной сумме образа
anonymous
( 04.01.14 21:51:07 MSK )
Ответ на: комментарий от RedRay 04.01.14 21:31:02 MSK
Т.е. ты даже не пытался поставить тот же Sysctl Config бесплатную версию? Не то что бы поискать аналоги.
Говорю же — правят они. Не знаю как, но правят. Может напрямую работают с образом.
Как изменять и удалять системные файлы и папки
Для изменения разных файлов на sdcard (карте памяти) необходимы root права, без которых детальное редактирование невозможно. Наиболее простым методом является замена и редактирование при помощи проводника аппарата:
- получаем на аппарате root права;
- устанавливаем программу Root Explorer (либо аналогичную);
- после запуска разрешаем программе использовать root права;
- выбираем нужный нам для редактирования файл, в верхнем углу справа жмем кнопку R/W, которая позволяет редактировать, и включает категорию под запись. После этого кнопка меняет значение на R/O.
После этого можно выполнять замену и редактирование файлов. Во время замены файлов нужно выставить такое же разрешение, как у заменяемого файла. Сначала смотрится разрешение родного файла, а только после этого выполняется его замена.
Разрешение можно посмотреть в меню при этом нужно нажать и держать на значок папки или файла. Довольно часто информация о разрешении высвечивается в виде [rw-r—r—]. Такая запись обозначает:
- «r» – установлена галочка в первом столбце;
- «w» – установлена галочка во втором столбце;
- «-» – установлена галочка в третьем столбце.
Первые три знака обозначают первую строку, вторые три знака соответствуют второй строке, а оставшиеся символы к третьей строке. Наглядней будет представить в виде схемы:
x x o
x o o
x o o
Полезные советы
- Как ускорить работу
- Как уменьшить энергопотребление
- Как поменять приложение по умолчанию
- Как пользоваться голосовым набором
- Как раздавать интернет по Wi-Fi
Полный сброс (Hard Reset)
- Полный сброс Samsung
- Полный сброс HTC
- Полный сброс LG
- Полный сброс Sony
- Полный сброс Acer
- Как удалить системные… Удалять системные приложения можно для снижения энергопотребления, освобождения объема оперативной памяти, а также от очистки оперативки от ненужных файлов и снижения объемов списка приложений. При удалении системных приложений могут возникнуть нестабильности в работе всего аппарата или операционной системы. Также могут…
- Как запретить Галерее… Для этого необходимо ненужные папки скрыть из Галереи путем создания файла .nomedia. Данные из этой папки заранее скопируйте, иначе они удалятся. Если те файлы, которые необходимо скрыть находятся в Папка1/Папка2/Папка3, то можно поместить .nomedia только в первую папку. В таком…
- Как передавать файлы по Wi-Fi на… Простые передачи файлов по Wi-Fi и Bluetooth невозможны за счет того, что Wi-Fi не придерживает протокола отправки данных FTP. Для того чтобы передавать файлы по Wi-Fi обязательными условиями являются следующие: Необходимо иметь WLAN – беспроводную локальную сеть, к которой должны…
Комментарии к статье «Как изменять и удалять системные файлы и папки»
02.12.2013 в 15:35
Программа классная! Я столько с ее помощью ненужных приложений удалила! Но здесь главное не удалить лишнего, а то работать вообще перестанет.
Добавить комментарий Отменить ответ
- Система
- Интернет и связь
- Контакты
- Мультимедия
- Приложения
- Разное
- Ремонт Телефонов
- Удаленая разблокировка телефонов
- Снятие блокировки FRP
- Удаление Huawei ID
- Разблокировка iCloud
- Замена экрана
- Замена usb разъёма
- Перепрошивка
- Разблокировка от оператора
- Контакты для связи
- Консультация по телефону
FAQ Total commander ( как редактировать системные файлы )
Вы наверно все сталкивались с проблемой при редактировании и исправлении или заменой файлов находящихся в системных файлах
вот один из примеров
так вот, как этого избежать и можно было свободно работать заменять и редактировать фалы.
В низу в total command находим значок
далее заходим Добавить/Изменить кнопку
Выбираем Сменить Каталог
Выбираем Внутренняя команда
далее
находим Перемонтировать
и нажимаем Ok/Применить
Добавится значёк снизу консоли
Ну вот и все Самое главное мы сделали
Теперь если вы хотите Отредактировать какой то файл в системной папке или добавить,
находим файл не важно для редактировании или замены , смотри внизу на значок, если написано
— значит файлы или раздел в режиме чтения
если
— значит файлы или раздел в режиме чтения и записи
так вот если написано
значит нажимаем на него появится окно
нажимаем Ок теперь раздел или файл предназначен для редактирования или замены.
Все пока . Удачи.
Рекомендуем посмотреть:
- Просмотров: 21 806