При разработке мобильных приложений на платформе 1С:Предприятие часто возникает ситуация, когда штатные средства мультимедиа (звук, камера, микрофон) отказываются работать в собранном APK-файле. Пользователь видит системное сообщение: "Функциональность Камера, Микрофон, Библиотека музыки, Библиотеки картинок и видео, Воспроизведение аудио и вибрация отключена в мобильном приложении". Проблема осложняется тем, что в конфигураторе все флажки разрешений могут быть проставлены, а логи сборщика не показывают явных ошибок. В этой статье мы подробно разберем, как обеспечить стабильную работу звука в мобильном клиенте.
Проанализируем наиболее частую причину отказа мультимедийных функций — несоответствие версий основной платформы 1С и версии мобильного клиента. Рассмотрим ситуацию: если ваша основная конфигурация работает на платформе 8.3.18.1483, а мобильное приложение собирается с использованием мобильной платформы версии 20 и выше, возникает конфликт библиотек.
Выясним причину: функционал мобильного клиента старших релизов (начиная с 20-го) содержит обновленные механизмы взаимодействия с API Android. Если «движок» сборки значительно новее основной платформы, системные вызовы для работы со звуком или сканером штрихкодов могут игнорироваться или блокироваться.
Решение: Приведите платформу 1С и платформу мобильного клиента к «одному знаменателю». Если вы используете современный функционал, поднимите версию основной платформы до актуальной (например, 8.3.20+). Если это невозможно, используйте при сборке «древнюю» мобильную платформу, соответствующую вашему релизу (например, 18-й серии). При необходимости синхронизировать версии сразу в нескольких системах автоматическое обновление и тестирование баз 1С обеспечивает выполнение регламентных работ в фоновом режиме.
Разберем важный нюанс: начиная с Android 6.0, недостаточно просто указать разрешения в манифесте приложения (в конфигураторе 1С). Система использует механизм Runtime Permissions. Если мобильный клиент сообщает об отключенной функциональности, это может означать, что приложение не запросило разрешение у пользователя в явном виде или пользователь его отклонил.
Посмотрим на пример кода, который необходимо добавить в модули мобильного приложения перед воспроизведением звука:
// Проверим наличие разрешения на использование аудио
Если Не СредстваМультимедиа.РазрешеноИспользование() Тогда
// Запросим разрешение у пользователя в системном диалоге
СредстваМультимедиа.ЗапроситьРазрешение(ТипРазрешенияМультимедиа.ВоспроизведениеАудио);
КонецЕсли;
Только после подтверждения пользователем в системном окне Android, функционал воспроизведения станет доступен. Без этого программного вызова операционная система будет блокировать доступ к аудио-библиотекам, даже если в конфигураторе стоят все нужные «галочки».
Рассмотрим ситуацию с размещением ресурсов. При использовании онлайн-сборщика мы прикрепляем архив с файлами. Важно понимать, как мобильное приложение «видит» эти данные после установки. Часто разработчики пытаются обращаться к файлам по абсолютным путям, что в среде Android недопустимо.
Проанализируем правильный алгоритм работы с файлами:
СредстваМультимедиа.Пример вызова воспроизведения файла, находящегося в ресурсах приложения:
ПутьКФайлу = ДокументыСборки + "alert.wav";
Если ФайлСуществует(ПутьКФайлу) Тогда
СредстваМультимедиа.ВоспроизвестиАудио(ПутьКФайлу);
КонецЕсли;
Выясним, почему звук может прерываться или не воспроизводиться, когда экран смартфона заблокирован. В Android существуют жесткие ограничения на фоновую активность. Если вам требуется проигрывание аудио в фоне, убедитесь, что в конфигураторе включен флаг "Воспроизведение аудио и вибрация в фоновом режиме".
Однако этого мало. Современные оболочки (MIUI, Flyme, Samsung One UI) принудительно «убивают» процессы 1С для экономии заряда. Рекомендуем выполнить следующие действия на устройстве пользователя:
Проанализируем техническую совместимость форматов. Несмотря на универсальность Android, мобильный клиент 1С наиболее стабильно работает с двумя типами файлов:
.wav (PCM) — идеален для коротких системных уведомлений, так как не требует больших ресурсов на декодирование..mp3 — подходит для длительных аудиозаписей.Использование .ogg или .aac может приводить к ошибкам на специфических прошивках терминалов сбора данных (ТСД), где производители модифицируют системные медиа-библиотеки. Если звук не проигрывается даже при правильных версиях платформы, попробуйте перекодировать файл в wav с частотой дискретизации 44100 Гц.
Если вышеперечисленные методы не помогают, разберем способ глубокой диагностики. Мы можем «вскрыть» поведение приложения с помощью инструмента Android Debug Bridge (ADB). Подключите устройство к ПК, включите режим отладки по USB и выполните команду в консоли:
adb logcat *:E
В момент попытки воспроизведения звука в логах появится запись типа Permission Denial или AudioService: Error playing sound. Это позволит точно определить, чего именно не хватает приложению: системного разрешения в манифесте или доступа к файлу по указанному пути.
Для успешного запуска звука в мобильном клиенте мы должны:
СредстваМультимедиа.ЗапроситьРазрешение().Соблюдение этих правил позволит избежать системных ошибок и обеспечит корректную работу звуковых уведомлений на большинстве Android-устройств.