При разработке мобильных клиентов на платформе 1С:Предприятие часто возникают ситуации, когда, несмотря на включенные в конфигураторе настройки функциональности, приложение на устройстве отказывается выполнять определенные действия, например, воспроизводить аудиосигналы или вибрировать. Система выдает ошибку, сообщающую, что данные функции отключены. Давайте разберемся, почему это происходит и как заставить приложение работать корректно.
Основная причина данной ошибки кроется не в программном коде 1С, а в процессе формирования манифеста вашего приложения при сборке. Рассмотрим основные факторы, которые приводят к сбою:
Если стандартная процедура простановки галочек в конфигураторе и пересборка приложения не приносят результата, воспользуемся альтернативными методами. Разберем их по шагам.
Прежде чем грешить на сборщик, убедимся, что код написан правильно. Для корректной работы с мультимедиа на мобильных устройствах рекомендуется использовать временные файлы. Рассмотрим пример реализации:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
КаталогВР = КаталогВременныхФайлов();
Для н = 1 по 4 Цикл
ИмяФайла = КаталогВР + "Звук" + н + ".mp3";
Файл = Новый Файл(ИмяФайла);
Если Не Файл.Существует() Тогда
_Звук = ПолучитьФайлМакета("Звук" + н);
_Звук.Записать(ИмяФайла);
КонецЕсли;
КонецЦикла;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ВоспроизвестиЗвук(Номер)
#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
ИмяФайла = КаталогВременныхФайлов() + "Звук" + Номер + ".mp3";
ДД = Новый ДвоичныеДанные(ИмяФайла);
СредстваМультимедиа.ВоспроизвестиАудио(ДД, , , Истина);
#КонецЕсли
КонецПроцедуры
Использование СредстваМультимедиа.ВоспроизвестиАудио с параметром Истина в последнем аргументе позволяет приложению корректно обращаться к ресурсам устройства.
Это «хирургический» метод, который помогает в случаях, когда сборщик игнорирует настройки конфигуратора. Поступим следующим образом:
BackgroundAudioPlayback или AudioAndVibrationPlayback).true.Этот метод принудительно включает необходимые разрешения в итоговый пакет APK, обходя внутреннюю ошибку логики сборщика 1С.
Чтобы понять, где именно происходит разрыв связи между настройками и результатом, проанализируем логи сборки. Всегда ищите раздел «Устанавливаются разрешения...». Если вы видите там строку BackgroundAudioPlayback - НЕ ИСПОЛЬЗУЕТСЯ, это верный признак того, что даже если вы десять раз поставите галочки в конфигураторе, приложение не получит доступа к фоновому воспроизведению. В таком случае помогает либо полный сброс кеша сборщика, либо принудительная правка XML, описанная выше.
Помните также, что при первой установке или обновлении приложения на устройстве под управлением Android необходимо полностью удалить старую версию. Только чистая установка с корректным манифестом заставит систему Android корректно считать права доступа и разрешить использование аудио-библиотек или сканеров штрих-кодов.
В завершение, рекомендуем экспериментировать с версиями платформы. Если проект позволяет, откат на версию 8.3.18 часто решает подобные проблемы «из коробки», так как в этом релизе механизмы обработки прав еще не были затронуты специфическими багами 20-х и 21-х веток.