Как сопоставить файл с программой в Андроид

Сегодня я бы хотел рассказать вам о правильной работе с файлами в ОС Android. Итак, чаще всего у новичков возникают ситуации, когда обычные Java функции не могут корректно создать тот или иной файл в системе Android.
Во-первых, вам нужно обратить внимание на интересную особенность ОС:
когда вы устанавливаете apk приложение в эмулятор или телефон, система Linux (на которой базируется ядро Android) выделяет ему специальный User-ID, который является неким ключом доступа к (sandbox). То есть другие приложения в телефоне не смогут получить доступ к чтению файлов вашего приложения просто так. Кончено, всё это сделано в целях безопасности.
В общем, если вы запустите следующий код:

FileWriter f = new FileWriter(«impossible.txt»);

То этот код вызовет исключение: ‘java.io.FileNotFoundException: /impossible.txt ‘
Тогда как должен в случае отсутствия файла создать его.

Далее стоит отметить, что данное ограничение не распространяется на файлы, записываемые на SDCard. Туда можно писать любые файлы без всяких проблем, правда предварительно нужно добавить в AndroidManifest разрешение на запись:

Как извлечь APK файл из любого Android приложения?

Код файла на карту:

File fileName = null;
String sdState = android.os.Environment.getExternalStorageState();
if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) File sdDir = android.os.Environment.getExternalStorageDirectory();
fileName = new File(sdDir, «cache/primer.txt»);
> else fileName = context.getCacheDir();
>
if (!fileName.exists())
fileName.mkdirs();
try FileWriter f = new FileWriter(fileName);
f.write(«hello world»);
f.flush();
f.close();
> catch (Exception e)

>

Как уже ранее было сказано мною, android приложение находится в некой песочнице, изолированной от воздействия со стороны других приложений по умолчанию. Для того, чтобы создать файл внутри этой песочницы, следует использовать функцию openFileOutput(). Хочу отметить 2 аргумента:

1. имя файла
2. режим доступа к нему со стороны чужих приложений

С первым аргументом все ясно, что касается второго, то режимов существует два: MODE_WORLD_READABLE и/или MODE_WORLD_WRITEABLE.

И ещё, чтобы записать файл можно использовать следующий код:

final String TESTSTRING = new String(«Hello Android»);
FileOutputStream fOut = openFileOutput(«samplefile.txt», MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
// записываем строку в файл
osw.write(TESTSTRING);
/* проверяем, что все действительно записалось и закрываем файл */
osw.flush();
osw.close();

Для чтения файлов используется метод openFileInput():

FileInputStream fIn = openFileInput(«samplefile.txt»);
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[TESTSTRING.length()];
isr.read(inputBuffer);

ШИФРОВАНИЕ ФАЙЛОВ на ТЕЛЕФОНЕ ANDROID | Обзор EDS Lite


String readString = new String(inputBuffer);

Для удаления используется метод deleteFile() в контексте приложения/активити. На этом я бы хотел закончить полезный пост, спасибо за внимание!

Источник: habr.com

Как сопоставить тип файла программе андроид. Как изменить программу по умолчанию на андроид

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

Как изменить программы по умолчанию в Android

К примеру, у вас есть две программы для просмотра видео — MX Player и QuickPic. При очередном запросе чем открывать видеофайл, вы по ошибке нажали «Всегда QuickPic». При этом QuickPic поддерживает не все видеоформаты и приложение открывается с ошибкой:

Чтобы это исправить, вам необходимо зайти в «Настройки» — > «Приложения» и в открывшемся списке найти и открыть ошибочное приложение, которое вы случайно выбрали, в данном случае QuickPic.

Читайте также:
Как в программе 1с сделать баланс

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

Как настроить программу по умолчанию для конкретного типа файлов

Если вам надоело каждый раз указывать программу, при помощи которой открывать те или иные файлы, просто выберите нужную программу и нажмите кнопку «Всегда»:

Более таких запросов возникать не будет.

Как просмотреть все программы по умолчанию на Android

В магазине Google Play есть приложения, способные показать все настроенные по умолчанию приложения. К примеру, можно использовать Default App Manager :

Если у вас остались вопросы — , наши эксперты всегда готовы дать оперативный и исчерпывающий ответ!

Google весьма неплохо поработала над функционалом Android 4.0 Ice Cream Sandwich, а также над внешним видом и системы, и программ. Впрочем, это не мешает производителям смартфонов и планшетов с маниакальной настойчивостью «допиливать» систему, достаточно серьезно изменяя разные ее аспекты. Если говорить о настройке самим пользователем, то здесь Android представляется одной из самых гибких (если не самой гибкой) мобильных систем.

Прилагаемый ниже материал будет интересен тем, кто совсем недавно познакомился с Android, в частности версией 4.0. Рассматривать способы будем на примере Highscreen Alpha GT, который обладает нехарактерными для двухсимных аппаратов хорошими характеристиками и актуальной версией системы Google. Пользующимся же системой давно, напомним, что процесс установки и управления программами по умолчанию остался неизменным еще со времен Android 2.3.

Итак, мы прочитали советы по выбору мощного видеоплеера, просмотрщика PDF, менеджера SMS и любой другой программы. Далее зашли на Google Play или скачали установочный APK-файл на сайте вроде 4PDA. Как сделать так, чтобы наша программа по умолчанию использовалась для определенного действия? Для примера возьмем приложение просмотра файлов PDF. Итак, у нас уже есть Adobe Reader, но хотелось бы, не удаляя эту разработку, открывать файлы только с помощью программы PDF Reader.

Способ первый, банальный . Запускаем менеджер файлов и «тапаем» на нужный журнал. Так как у Adobe Reader появился «конкурент», мы увидим всплывающее окно с подписью «Что использовать?» (или ещё какой-либо схожей, здесь могут быть варианты) и выбором возможных для открытия файла программ.

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

Способ второй, расплата за невнимательность . Скажем, окно выбора программы появилось, мы поставили галочку, но случайно указали не PDF Reader, а Adobe Reader. Расстраиваться рано, будем исправлять ошибку. Вызываем системный пункт «Настройки» (надеюсь, не нужно объяснять, как его найти), «Приложения» и жмем на Adobe Reader для вызова настроек данной программы. Прокручиваем список вниз до заголовка «Запускать по умолчанию». Тут видим пункт «Удалить настройки по умолчанию».

Нажимаем и тем самым сбрасываем привязку к файлам PDF. Теперь при попытке открыть журнал PDF нам снова предложат список программ, где мы и выберем PDF Reader. Profit.

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

Читайте также:
Какой программой можно скачивать файлы из интернета без ограничения по скорости

Другая частность – замена стандартной клавиатуры. После установки новой клавиатуры идем в «Настройки», «Язык и ввод», активируем её галочкой напротив и вверху жмем на кнопку выбора клавиатуры по умолчанию.

Другой способ – в процессе ввода текста в самом верху экрана скользящим движением сверху вниз вызываем пункт «Выбор метода ввода». Как видим, ничего сложного.

Напоследок скажу, что на Google Play естественно не обошлось без специальных менеджеров управления программами по умолчанию. В качестве примера укажу на бесплатный Default App Manager Lite. Эта программа предоставляет список популярных задач типа браузера, камеры, музыки и прочих, сразу же показывается текущее выбранное приложение. По касанию пункта получаем список доступных для действия программ, потом а) легко/непринужденно жмем «Clear Defaults» б) в появившемся окне снимаем галочку со знакомого пункта «Удалить настройки по умолчанию» в) жмем клавишу возврата к прошлому экрану г) жмем «Set Defaults» д) отмечаем «По умолчанию для этого действия» и выбираем нужную программу.

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

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

Делимся файлами в Android с помощью FileProvider

Android Tools

Несколько недель назад мне было поручено открыть внутренний PDF-файл в любом приложении для чтения PDF на Android устройстве. Я думал, что это будет просто, но все оказалось сложнее. Документация Google по FileProvider оказалась запутанной и не имела конкретных примеров. Тем не менее, я знал, что должен использовать ContentProvider для решения этой проблемы.

Как один из примеров использования FileProvider, вы можете посмотреть следующий урок.

Что такое FileProvider?

ContentProvider — это компонент Android, который инкапсулирует данные и предоставляет их другим приложениям. Это необходимо в случае, если вам нужно обмениваться данными между несколькими приложениями. Например, данные контактов совместно используются другими приложениями, используя ContactsProvider, который является подклассом ContentProvider.

FileProvider — это подкласс ContentProvider. Хотя ContentProvider — это компонент, который позволяет вам безопасно делиться любыми данными, FileProvider используется специально для совместного использования внутренних файлов приложения. Класс FileProvider является частью библиотеки поддержки v4, поэтому обязательно включите ее в свой проект.

Чтобы заставить FileProvider работать, нужно выполнить следующие три действия:

  • Определить FileProvider в файле AndroidManifest.xml;
  • Создать XML-файл, содержащий все пути, которые FileProvider будет использовать совместно с другими приложениями;
  • Связать действительный URI в Intent и активировать его.

Определение FileProvider

Чтобы определить FileProvider внутри AndroidManifest.xml, вам необходимо ознакомиться с этими атрибутами и элементами:

  • android:authorities
  • android:exported
  • android:grantUriPermissions
  • android:name
  • субэлемент

Если всё это вам уже знакомо, ваше изучение FileProvider пройдёт немного легче, иначе я подготовил подробное описание каждого атрибута и его цели.

android:authorities

Вы должны определить хотя бы одно уникальное полномочие. Система Android хранит список всех поставщиков, и она отличает их по полномочиям. Полномочие определяет FileProvider точно так же, как ID приложения определяет приложение для Android.

В общем, Android-система использует определенную схему URI для ContentProviders. Схема определяется как content:/// , поэтому система будет знать, какой ContentProvider запрашивается, сопоставляя полномочия URI с полномочиями ContentProvider.

android:exported

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

Читайте также:
Понятие алгоритма и программы способы записи алгоритмов

Это должно научить вас никогда не программировать по наитию и всегда быть в курсе побочных эффектов вашего кода. Кроме того, всегда определяйте этот атрибут, потому что значение по умолчанию для SDK 16 и ниже true.

android:grantUriPermissions

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

Элемент может также иметь субэлементы . Единственное различие заключается в том, что с помощью атрибута вы можете поделиться чем-либо внутри внутреннего хранилища вашего приложения, в то время как субэлементы позволяют вам выбрать конкретное подмножество данных для совместного использования. Чтобы вместо этого использовать субэлементы, установите значение false.

субэлемент

Этот субэлемент должен быть определен при использовании FileProvider. Вы должны определить путь к XML-файлу, который содержит все пути данных, которые ваш FileProvider может использовать с внешними приложениями.

XML-файл должен иметь элемент в качестве его корня. Элемент должен иметь как минимум один дочерний элемент, который может быть следующим:

  • — внутреннее хранилище приложения, Context#getFilesDir()
  • — кэш внутреннего хранилища приложения, Context#getCacheDir()
  • — публичное внешнее хранилище, Environment.getExternalStorageDirectory()
  • — внешнее хранилище приложения, Context#getExternalFilesDir(null)
  • — кэш внешнего хранилища приложения, Context#getExternalCacheDir()

Возможно, вы заметили, что они различаются в зависимости от каталога приложения, которое они определяют.

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

android:name

С помощью этого атрибута мы устанавливаем это значение для android.support.v4.content.FileProvider.

После того, как вы определили FileProvider в своем AndroidManifest.xml, вы, наконец, готовы его использовать. Чтобы поделиться файлом, вам нужно создать намерение и предоставить ему действительный URI. URI генерируется с использованием класса FileProvider.

Реализация кода

androidmanifest.xml

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

file_provider_paths.xml

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

Использование вашего FileProvider

// создаём новое намерение Intent intent = new Intent(Intent.ACTION_VIEW); // устанавливаем флаг для того, чтобы дать внешнему приложению пользоваться нашим FileProvider intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // генерируем URI, я определил полномочие как ID приложения в манифесте, последний параметр это файл, который я хочу открыть String uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID, file); // я открываю PDF-файл, поэтому я даю ему действительный тип MIME intent.setDataAndType(uri, «application/pdf»); // подтвердите, что устройство может открыть этот файл! PackageManager pm = getActivity().getPackageManager(); if (intent.resolveActivity(pm) != null)

Как только вы поймете, как это работает, реализация вашего собственного FileProvider станет действительно простой.

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

Раздел: Кодинг Метки: Android, code, file, fileprovider, lesson, manifest, provider, xml

Делимся файлами в Android с помощью FileProvider : 9 комментариев

  1. Евгений 20.06.2019 android_name=»android.support.v4.content.FileProvider»
    почему в моем провайдере подсвечивается красным v4.content.FileProvider
  1. dimonbugor 12.08.2019 androidx?
  1. Роман 15.11.2019 В androidx это androidx.core.content.FileProvider
  1. Иван 04.08.2020 Большое спасибо

Источник: android-tools.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru