Как программно сохранять фотографии из мобильного приложения 1С в галерею Android?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Вариант 1: Использование системного приложения камеры через ЗапускПриложенияМобильногоУстройства

Один из способов взаимодействия с камерой — это вызов внешнего системного приложения, используя Android tools. Мы можем сформировать намерение (intent), которое просит Android открыть камеру и сохранить результат по указанному нами пути. Рассмотрим, как это реализовать на языке 1С:

Для начала необходимо определить путь к файлу. Рекомендуется использовать методы работы с файловой системой платформы, например КаталогДокументов(). Обратите внимание, что для корректной работы с путями в Android нам нужно правильно форматировать строку пути:


Файлкартинки = КаталогДокументов() + "MobileMKFoto.jpg";
ФайлКартинки = СтрЗаменить(ФайлКартинки, "\", "/");
ФайлКартинки = "file://" + ФайлКартинки;

НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
НовВз.ДополнительныеДанные.Добавить("output", ФайлКартинки, "Uri");

Если НовВз.Запустить(Истина) <> 0 Тогда
    // Обработка успеха или ошибки
КонецЕсли;

Важно помнить, что этот метод сильно зависит от прав доступа, выданных вашему приложению в настройках Android. Также на современных версиях Android (10+) такой подход может быть ограничен из-за политик Scoped Storage, которые запрещают сторонним приложениям прямую запись в произвольные папки.

Вариант 2: Использование встроенных СредствМультимедиа

В платформе 1С существуют СредстваМультимедиа, которые позволяют унифицировано работать с камерой, что часто используется в мобильных приложениях для приемщиков. Этот метод проще в реализации, так как платформа берет на себя взаимодействие с интерфейсом камеры. Однако после получения данных нам нужно самостоятельно записать их в файл. Посмотрим, как это выглядит:


ОпределеннаяПапка = "Android/data/com.e1c"; // Путь зависит от настроек прав
ДанныеМультимедиа = СредстваМультимедиа.СделатьФотоснимок(, РазрешениеКамерыУстройства, 100,,,);
ДД = ДанныеМультимедиа.ПолучитьДвоичныеДанные();
ДД.Записать("" + ОпределеннаяПапка + ИмяФайла);

При использовании этого подхода помните, что ДвоичныеДанные сохраняются во внутреннее хранилище приложения. Если вы запишете файл в папку, скрытую от медиа-сканера, Галерея не увидит этот файл.

Ключевые нюансы и рекомендации

При работе с файлами в мобильном 1С, учитывайте следующие важные моменты:

  1. Видимость в галерее: Если вы сохраняете файл в изолированную директорию (например, Android/data/...), системная галерея его не проиндексирует. Для того чтобы фото появилось в галерее, необходимо сохранять его в публичные директории типа DCIM или Pictures.
  2. Разрешения: Убедитесь, что в манифесте мобильного приложения и в настройках самого смартфона у программы есть разрешение WRITE_EXTERNAL_STORAGE (для старых версий Android) или настроены соответствующие права доступа для мультимедиа.
  3. Индексация: Даже при сохранении файла в публичную папку, операционная система может не сразу добавить его в индекс Галереи. В некоторых случаях требуется принудительный вызов медиа-сканера, что в 1С можно реализовать через дополнительные методы расширения возможностей приложения.
  4. Безопасность: Современные версии Android (начиная с Android 10 и выше) накладывают серьезные ограничения на работу с файловой системой. Использование Uri — это единственный надежный путь в современных условиях, так как он делегирует управление правами записи самой операционной системе.

Подводя итог: если ваша цель — максимальная совместимость, используйте ЗапускПриложенияМобильногоУстройства с передачей Uri, либо, если позволяют бизнес-задачи, храните файлы внутри базы 1С в виде двоичных данных, не вынося их в общую галерею телефона. Это избавит вас от множества проблем с правами доступа и индексацией файлов системой.

← На главную