## Android: Открытие программой по умолчанию
Введение
Android предоставляет гибкую систему обработки намерений (Intent), которая позволяет приложениям взаимодействовать друг с другом и с системными службами. Одно из распространенных применений намерений — открывать внешнее приложение для выполнения определенной задачи. В данном руководстве мы рассмотрим различные способы открыть программу по умолчанию на устройстве Android с помощью намерений.
### Намерения с действием `ACTION_VIEW`
Параметры:
`data`: URI ресурса, который необходимо открыть
`mimeType`: Тип MIME ресурса (например, «text/plain» для текстового файла)
Код:
«`java
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(«https://www.example.com»));
startActivity(intent);
«`
Пример: Открытие веб-браузера для отображения URL-адреса.
### Намерения с действием `ACTION_EDIT`
Параметры:
`data`: URI ресурса, который необходимо открыть для редактирования
`mimeType`: Тип MIME ресурса (например, «text/plain» для текстового файла)
Код:
«`java
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Uri.parse(«content://com.example.notes/notes/1»));
startActivity(intent);
«`
Пример: Открытие приложения для редактирования заметок для редактирования конкретной заметки.
### Намерения с действием `ACTION_SEND`
Параметры:
`type`: Тип данных, которые необходимо отправить (например, «text/plain» для текстового сообщения)
`subject`: Предмет сообщения (необязательно)
`text`: Содержимое сообщения (необязательно)
Код:
«`java
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(«text/plain»);
intent.putExtra(Intent.EXTRA_TEXT, «Привет, мир!»);
startActivity(intent);
«`
Пример: Открытие приложения для обмена сообщениями для отправки текстового сообщения.
### Намерения с действием `ACTION_SENDTO`
Параметры:
`data`: URI адресата (например, «mailto:example@gmail.com» для адреса электронной почты)
Код:
«`java
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse(«mailto:example@gmail.com»));
startActivity(intent);
«`
Пример: Открытие приложения для отправки электронной почты, готового к отправке сообщения на указанный адрес электронной почты.
### Намерения с действием `ACTION_SEND_MULTIPLE`
Параметры:
`type`: Тип данных, которые необходимо отправить (например, «text/plain» для текстового сообщения)
`subject`: Предмет сообщения (необязательно)
`text`: Содержимое сообщения (необязательно)
`uriList`: Список URI, представляющих файлы, которые необходимо отправить
Код:
«`java
ArrayList
uris.add(Uri.parse(«file:///path/to/file1»));
uris.add(Uri.parse(«file:///path/to/file2»));
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType(«text/plain»);
intent.putExtra(Intent.EXTRA_TEXT, «Привет, мир!»);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(intent);
«`
Пример: Открытие приложения для обмена сообщениями для отправки текстового сообщения вместе с несколькими файлами.
### Выбор приложения по умолчанию
По умолчанию Android предоставляет список приложений, которые могут обрабатывать конкретное намерение. Пользователь может выбрать одно из приложений в качестве приложения по умолчанию для обработки этого намерения в будущем. Чтобы разрешить выбор приложения по умолчанию, используйте метод `createChooser()` для создания намерения.
Код:
«`java
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(«text/plain»);
intent.putExtra(Intent.EXTRA_TEXT, «Привет, мир!»);
Intent chooser = Intent.createChooser(intent, «Выбрать приложение»);
startActivity(chooser);
«`
### Специальные намерения для общих действий
Android предоставляет ряд специальных намерений, которые используются для распространенных действий, таких как:
`ACTION_CALL`: Вызов телефонного номера
`ACTION_SEND_EMAIL`: Отправка электронной почты
`ACTION_VIEW_IMAGE`: Просмотр изображения
`ACTION_PLAY_MUSIC`: Воспроизведение музыки
`ACTION_VIEW_VIDEO`: Просмотр видео
### Рекомендованные практики
Всегда используйте намерения с соответствующим действием и параметрами.
Проверяйте доступность приложения-обработчика перед запуском намерения, используя метод `resolveActivity()`.
Установите флаг `FLAG_ACTIVITY_NEW_TASK`, чтобы запустить намерение в новом экземпляре задачи.
Используйте метод `grantUriPermission()` для предоставления доступ к файлам другим приложениям, если это необходимо.
Будьте готовы обрабатывать исключение `ActivityNotFoundException`, которое может быть выброшено, если ни одно из приложений не может обработать намерение.
### Дополнительные ресурсы
[Намерения Android](https://developer.android.com/guide/components/intents-filters)
[Выбор приложения по умолчанию](https://developer.android.com/training/basics/intents/chooser)
[Специальные намерения Android](https://developer.android.com/guide/components/intents-common)