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

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

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

Разбор физического расположения файлов мобильного приложения

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

1. Внутренняя защищенная память. По умолчанию приложение устанавливается по пути вида /data/data/com.1c.mobile.client/ (для стандартного клиента) или /data/data/[имя.вашего.пакета]/ (если вы использовали "Сборщик мобильных приложений"). Рассмотрим особенности этой директории: доступ к ней закрыт для пользователя и других приложений. Вы не сможете "просто зайти" туда через проводник, если на устройстве не получены root-права. Здесь 1С хранит свой исполняемый код, кэш конфигурации и внутренние базы SQLite.

2. Внешняя память (Sandbox). Для работы с файлами, которые должны быть доступны программно (например, ваши звуковые файлы), следует использовать пути, предоставляемые платформой 1С. Мы рекомендуем использовать функцию КаталогДокументов(). На современных версиях Android этот путь обычно выглядит так: /storage/emulated/0/Android/data/[имя.вашего.пакета]/files. Это "песочница" вашего приложения, где вы имеете полные права на чтение и запись без запроса дополнительных разрешений у пользователя.

Использование встроенных функций для поиска путей

Выясним, как программно определить, куда положить файл, чтобы мобильное приложение его "увидело". Вместо того чтобы прописывать пути вручную (что является плохой практикой из-за различий в версиях Android), мы должны использовать методы встроенного языка 1С. Рассмотрим следующий пример кода:


// Получаем путь к папке документов приложения на мобильном устройстве
ПутьКПапке = КаталогДокументов();
ИмяФайлаЗвука = ПутьКПапке + "error_sound.mp3";

// Проверим, существует ли файл
ФайлНаДиске = Новый Файл(ИмяФайлаЗвука);
Если ФайлНаДиске.Существует() Тогда
    Сообщить("Файл готов к воспроизведению: " + ИмяФайлаЗвука);
КонецЕсли;

Проанализируем ситуацию: если мы работаем в режиме Мобильного клиента, важно помнить, что код может исполняться как на стороне сервера (в основной базе), так и на стороне клиента (на самом смартфоне). Поиск физического пути должен происходить строго в контексте &НаКлиенте.

Реализация воспроизведения звуковых уведомлений

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

Рассмотрим пример функции для воспроизведения аудио:


&НаКлиенте
Процедура ВоспроизвестиЗвуковойСигнал(ПутьКФайлу)
    // Проверяем поддержку мультимедиа на текущем устройстве
    Если СредстваМультимедиа.ПоддерживаетсяВоспроизведениеАудио() Тогда
        Попытка
            СредстваМультимедиа.ВоспроизвестиАудио(ПутьКФайлу);
        Исключение
            Сообщить("Ошибка при воспроизведении: " + ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Воспроизведение аудио не поддерживается на данном устройстве");
    КонецЕсли;
КонецПроцедуры

Важный момент: метод ВоспроизвестиАудио() принимает в качестве параметра строку с полным путем к файлу или URL. Если вы планируете проигрывать звук из интернета, убедитесь, что у приложения есть разрешение на доступ к сети в манифесте (при сборке через Сборщик мобильных приложений).

Алгоритм работы с аудиофайлами через Общие макеты

Часто возникает вопрос: как доставить аудиофайл на устройство, если мы не хотим заставлять пользователя вручную копировать его в папку /Android/data/? Самый надежный способ — хранить звук внутри конфигурации 1С. Проанализируем этот алгоритм:

  1. Загрузите ваш файл (например, beep.wav) в конфигурацию как Общий макет с типом Двоичные данные.
  2. При запуске приложения или перед первым воспроизведением проверьте наличие файла в КаталогВременныхФайлов().
  3. Если файла нет, извлеките его из макета и запишите на диск устройства.
  4. Передайте путь к извлеченному файлу в метод СредстваМультимедиа.ВоспроизвестиАудио().

Посмотрим на пример кода, реализующий этот механизм:


&НаКлиенте
Процедура ПодготовитьИВоспроизвестиЗвук()
    ИмяФайла = "alarm.mp3";
    ПутьНаУстройстве = КаталогВременныхФайлов() + ИмяФайла;
    
    // Извлекаем данные из макета (серверный вызов)
    ДанныеЗвука = ПолучитьМакетСервер(); 
    
    // Сохраняем на мобильном устройстве
    ДанныеЗвука.Записать(ПутьНаУстройстве);
    
    // Воспроизводим
    СредстваМультимедиа.ВоспроизвестиАудио(ПутьНаУстройстве);
КонецПроцедуры

&НаСервере
Функция ПолучитьМакетСервер()
    Возврат БиблиотекаМакет.ПолучитьОбщийМакет("ЗвукОшибки");
КонецФункции

Нюансы работы в режиме Мобильного клиента

При использовании режима Мобильного клиента (Mobile Client) необходимо четко разделять контексты. В отличие от автономного мобильного приложения, мобильный клиент — это "тонкая" оболочка. Весь основной программный код выполняется на сервере. Поэтому попытка вызвать КаталогДокументов() на сервере вернет путь к папке на сервере (Windows/Linux), а не на телефоне.

Всегда используйте директиву &НаКлиенте для манипуляций с файлами, которые должны проигрываться через динамик смартфона. Кроме того, в шумных условиях (склады, производства) хорошей практикой считается комбинирование звука с вибрацией. Для этого используйте метод СредстваМультимедиа.Вибрировать(500) (длительность в миллисекундах).

Взаимодействие с внешним оборудованием (ТСД)

Если вы разрабатываете приложение для Терминалов Сбора Данных (ТСД), стоит учитывать, что многие профессиональные устройства (Zebra, Honeywell, Urovo) имеют собственные аппаратные настройки звука. Часто звук успешного сканирования генерируется не мобильным приложением 1С, а системным драйвером сканера (например, DataWedge). В таких случаях, чтобы 1С могла проиграть свой звук (например, "Товар не найден"), вам нужно настроить сканер на передачу данных через Intent или Внешнее событие, перехватить его в 1С и только тогда программно запустить аудиофайл по описанной выше схеме.

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

← На главную