Мне было интересно, как в приложениях Android и Android реализованы кнопка «Поделиться» и механизм обмена. Например, когда я нажимаю кнопку «Поделиться» на YouTube, появляется список приложений для обмена. Как определяется этот список? Есть ли конкретное намерение «поделиться», и тогда появятся все точки, способные делиться типом намерения, указанным в дополнениях? Какое техническое имя шаблона проектирования используется для реализации этого? Спасибо.
share-menu
intents
Джек Мэддингтон
источник
источник
Ответы:
Это состоит из двух частей: механизм, позволяющий коммуникационным приложениям сообщать о своих вещах, и механизм, которым приложения могут делиться контентом. Я буду разбираться с ними по одному, но сначала небольшое замечание о намерениях .
Intents
Намерение в Android является то , что используется для запуска приложения. Он может работать как ярлык или как файловая ассоциация Windows. Намерение может указать имя приложения для запуска, но это не обязательно. Он также может указывать действие, которое нужно выполнить (например, «открыть основное действие», «просмотреть этот URL», «создать запись в календаре») и тип MIME объекта, на который он будет действовать (например, то, что вы хотите просмотреть имеет тип изображения / JPEG). Некоторые имена действий относятся к конкретному приложению, но многие из них стандартизированы Android, чтобы позволить приложениям взаимодействовать.
Фильтры намерений и коммуникационное приложение
Каждое приложение определяет намеренные фильтры, чтобы сказать, какие действия оно может выполнить. например, приложение для просмотра изображений зарегистрирует фильтр намерений для «просмотра этого URL», где тип MIME - «image / *»; веб-браузер регистрирует фильтр намерений для «просмотра этого URL», где схема URL - «http» или «https». Чтобы иметь возможность делиться вещами, приложение регистрирует фильтр намерений для намерения «отправить», либо с определенным типом (например, если оно может только обмениваться фотографиями), либо для любого типа.
Контент приложение
Приложение, которое хочет поделиться некоторым контентом, создает намерение с действием «поделиться» и URL, указывающим на контент для обмена. (Это часто «временный» URL-адрес, который дает принимающему приложению временный доступ к файлу в личном хранилище приложения с контентом или к потоку, созданному приложением с контентом.) В нем не указывается имя приложения для обработки намерение. Затем он передает это намерение платформе Android и просит Android отобразить диалоговое окно выбора . Android сравнивает намерение с фильтрами намерений из всех установленных приложений, создает список и показывает его пользователю. Когда пользователь выбирает конкретное приложение, Android запускает это приложение и передает его намерение. Приложение использует URL-адрес для получения содержимого из исходного приложения.
Новое в Зефире: Прямая доля
У Зефира есть еще один механизм, который называется Direct Share . Это дополняет механизм намерений, так что вы можете выбирать людей или группы для совместного использования непосредственно из диалога выбора, пропуская дополнительный шаг «кому бы вы хотели его отправить». Это работает немного по-другому: коммуникационное приложение должно предоставлять услугу. Когда приложение с содержимым запрашивает выбор, Android запускает службу для каждого соответствующего приложения. Сервис возвращает список релевантных целей общего ресурса , и Android собирает все эти отдельные списки в список, который отображается в диалоговом окне.
источник
Я не разработчик, поэтому я могу дать грубое объяснение: приложения объявляют в своих
Manifest
Mimetypes, которые они понимают и на которые они хотят реагировать в действиях по обмену. Для этого они определяют так называемые «фильтры намерений», например:Поэтому всякий раз, когда вы нажимаете кнопку «Поделиться», контент для обмена оценивается и сопоставляется с приложениями, заявившими о своей готовности получить формат.
Источники:
источник