Разработка мобильных приложений на платформе 1С часто сталкивается с необходимостью интеграции с аппаратными функциями устройства, такими как камера. Одной из наиболее частых задач является не просто получение снимка, а его сохранение в определенную папку устройства, чтобы пользователь мог легко найти его в стандартной галерее. Давайте разберем, как подойти к решению этой задачи, учитывая ограничения безопасности современных версий Android.
Один из способов взаимодействия с камерой — это вызов внешнего системного приложения, используя Android tools. Мы можем сформировать намерение (intent), которое просит Android открыть камеру и сохранить результат по указанному нами пути. Рассмотрим, как это реализовать на языке 1С:
Для начала необходимо определить путь к файлу. Рекомендуется использовать методы работы с файловой системой платформы, например КаталогДокументов(). Обратите внимание, что для корректной работы с путями в Android нам нужно правильно форматировать строку пути:
Файлкартинки = КаталогДокументов() + "MobileMKFoto.jpg";
ФайлКартинки = СтрЗаменить(ФайлКартинки, "\", "/");
ФайлКартинки = "file://" + ФайлКартинки;
НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
НовВз.ДополнительныеДанные.Добавить("output", ФайлКартинки, "Uri");
Если НовВз.Запустить(Истина) <> 0 Тогда
// Обработка успеха или ошибки
КонецЕсли;
Важно помнить, что этот метод сильно зависит от прав доступа, выданных вашему приложению в настройках Android. Также на современных версиях Android (10+) такой подход может быть ограничен из-за политик Scoped Storage, которые запрещают сторонним приложениям прямую запись в произвольные папки.
В платформе 1С существуют СредстваМультимедиа, которые позволяют унифицировано работать с камерой, что часто используется в мобильных приложениях для приемщиков. Этот метод проще в реализации, так как платформа берет на себя взаимодействие с интерфейсом камеры. Однако после получения данных нам нужно самостоятельно записать их в файл. Посмотрим, как это выглядит:
ОпределеннаяПапка = "Android/data/com.e1c"; // Путь зависит от настроек прав
ДанныеМультимедиа = СредстваМультимедиа.СделатьФотоснимок(, РазрешениеКамерыУстройства, 100,,,);
ДД = ДанныеМультимедиа.ПолучитьДвоичныеДанные();
ДД.Записать("" + ОпределеннаяПапка + ИмяФайла);
При использовании этого подхода помните, что ДвоичныеДанные сохраняются во внутреннее хранилище приложения. Если вы запишете файл в папку, скрытую от медиа-сканера, Галерея не увидит этот файл.
При работе с файлами в мобильном 1С, учитывайте следующие важные моменты:
Android/data/...), системная галерея его не проиндексирует. Для того чтобы фото появилось в галерее, необходимо сохранять его в публичные директории типа DCIM или Pictures.WRITE_EXTERNAL_STORAGE (для старых версий Android) или настроены соответствующие права доступа для мультимедиа.Uri — это единственный надежный путь в современных условиях, так как он делегирует управление правами записи самой операционной системе.Подводя итог: если ваша цель — максимальная совместимость, используйте ЗапускПриложенияМобильногоУстройства с передачей Uri, либо, если позволяют бизнес-задачи, храните файлы внутри базы 1С в виде двоичных данных, не вынося их в общую галерею телефона. Это избавит вас от множества проблем с правами доступа и индексацией файлов системой.