Дневник капитана, желтая дата ‘20200427’.
В системе
Android для передачи данных и управления от приложения к приложению, а также от формы к форме внутри приложения используются
Интенты (
Намерения, Intents). 1С тоже умеет отсылать интенты с помощью объекта
ЗапускПриложенияМобильногоУстройства (MobileDeviceApplicationRun).
С помощью этого механизма можно расширить функционал вашего решения внешними приложениями. Например, сделать кнопку
Поделиться, которая отправит текст или файл нужным способом, запустить внешний фотоаппарат или сканер штрих кода, передать файл по
FTP...
Про использование этого механизма в 1С рассказано в
отличной статье Дмитрия Шерстобитова. Но важно еще знать, может ли интересующее вас приложение принимать внешние интенты, и если может, то в каком формате. Хочу сегодня рассказать, как можно узнать об этом.
Информация о формате применяемых интентов содержится в
Манифесте приложения. Значит, встает вопрос, как посмотреть манифест нужного приложения. Для этого есть программа
ManifestViewer. Запустив ее, вы увидите список всех установленных приложений. Нажмите на выбранное и выберете пункт
Look the AndroidManifest.xml.
В открывшемся манифесте нас интересует секция в тегах
<activity> <intent-filter> <action>. Почти во всех приложениях есть действие
MAIN, но ничего особенного с помощью него не сделаешь, разве что, просто запустишь программу. Но если вы нашли какие-то еще другие действия, это отлично, значит, разработчики приложения позаботились об интеграции.
Возьмем для примера приложение
WhatsApp. В манифесте можем найти кусок текста, изображенный на картинке ниже. Нас интересует выделенный блок. Это команда отправки сообщения на определенный номер. В 1С вызов этого интента будет выглядеть следующим образом:
Intent = New MobileDeviceApplicationRun;
Intent.Action = "android.intent.action.SENDTO";
Intent.Data = "smsto:" + PhoneNumber;
Intent.Run(True);
Здесь мы посылаем команду без указания конкретного приложения. Т.е., если под этот фильтр подойдут несколько приложений, выйдет окно выбора. Если нужно отправлять только через
WhatsApp, необходимо добавить строку:
Intent.Package = "com.whatsapp";Название пакета можно найти в начале Манифеста.
Как выглядит отправка этой и подобных команд на чистом
Android, можно посмотреть в
этой статье. К сожалению, из файла манифеста нельзя понять все форматы и параметры команд, например, про дополнительные данные. Для примера можно сравнить команды из статьи и манифест
WhatsApp. Поэтому часто приходится искать разъяснения в интернете. Однако именно общие представления об обрабатываемых командах можно узнать из файла манифеста.