Есть приложение (под андроид).
Приложение должно сказать какой-то текст
СредстваМультимедиа.ВоспроизвестиТекст(текстСообщения
, "ru"
, Скорость
, Тембр
, Новый ОписаниеОповещения("ПослеПроизнесенияТекста", ЭтаФорма)
, Истина
);
&НаКлиенте
Процедура ПослеПроизнесенияТекста(допПарам) Экспорт
#Если МобильноеПриложениеКлиент Тогда
СредстваМультимедиа.ОстановитьВоспроизведениеТекста();
#КонецЕсли
КонецПроцедуры
Показать
Играет плеер на заднем фоне (не 1С ))) - другая программа).
Плеер может и не играть - тогда проблемы нет - проблема только когда он играет.
При произнесении текста - плеер ставится на паузу - отлично.
Но только вот беда - после окончания произнесения - плеер продолжает молчать.
Можно было бы грешить на плеер, только вот - после закрытия приложения - плеер начинает играть дальше.
Вот каким методом (кроме ЗавершитьРаботуСистемы(Ложь) можно сказать системе, что можно играть музыку дальше ?
(p.s.: с учетом того, играл ли плеер ДО того, как мы решили сказать текст)
Если советы не в тему - извините: вы не обрисовываете всю задачу, а ставите перед фактом:
НУ мы же взрослые люди.
Понимать должны - что плеер может и не играть - это выбор пользователя, что он будет делать вместе с приложением.
В задаче описано поведение - если закрыть программу - плеер продолжает играть.
Собственно - если его не было - нет и проблемы - вроде ж логично.
НУ мы же взрослые люди.
Понимать должны - что плеер может и не играть
Ага, лично я, как "взрослый человек" понял так, что работа плеера - это часть задачи, что он должен играть - типа как музычка на горячей линии между ответами робота: "Ваш номер в очереди - шестнадцатый!" :-)
Ну, а раз он вообще не имеет никакого отношения к работе 1С, то на ум приходит разве что принудительная очистка задействованного 1С обращения к медиаресурсам - то, что происходит при завершении работы приложения:
Мультимедиа = Новый СредстваМультимедиа;
Мультимедиа.ВоспроизвестиТекст(текстСообщения
, "ru"
, Скорость
, Тембр
, Новый ОписаниеОповещения("ПослеПроизнесенияТекста", ЭтаФорма)
, Истина
);
&НаКлиенте
Процедура ПослеПроизнесенияТекста(допПарам) Экспорт
#Если МобильноеПриложениеКлиент Тогда
СредстваМультимедиа.ОстановитьВоспроизведениеТекста();
Мультимедиа = Неопределено;
#КонецЕсли
КонецПроцедуры
А вот интересно - это проявляется только для метода ВоспроизвестиТекст() или в целом для СредстваМультимедиа? Поэкспериментировать не на чем, но я бы проверил и другие методы, например, ВоспроизвестиАудио() - встанет ли плеер на паузу и возобновит ли работу после завершения аудио?
Зачем это: если ВоспроизвестиАудио() отработает корректно (музычка опять заиграет), то можно попробовать обойти баг - например, воспроизвести короткий сигнал (бип) или вообще маленькую паузу (пустой звук) после ОстановитьВоспроизведениеТекста().
Ну, а если и ВоспроизвестиАудио() поведет себя так же, как и ВоспроизвестиТекст() - тады ой, это баг платформы и только 1С может его исправить.
(9) Ещё хуже )
После ВоспроизвестиАудио выход даже не помогает, но тут плеер воспринял наш звук как другой плеер запущенный и стал вообще на паузу - тут понятна причина (хоть и не решает проблему).
ВоспроизвестиЗвуковоеОповещение тоже не помогает
Вчера ещё пробовал - логично "Поле недоступно для записи"
Это же уже не локальный объект, а общие мы менять не имеем права.
--
Сообщу тут, как решится обращение в 1С на эту тему.
(13) к плееру претензий нет - топ 1 - PowerAmp.
Срабатывает короткий автофокус (такой же как и при навигации).
Вот только он срабатывает и не заканчивается до закрытия программы.
Анализ черного ящика показывает, что всё таки виновник - 1С, так как при закрытии приложения автофокус хочешь\не хочешь, а заканчивается и плеер отлично отрабатывает своё дело.
(14) Не, я о том, что есть события в андроид, которые плеер отрабатывает. И когда 1с начинает вещать - проходит событие, что музыка мешает. А когда 1с заканчивает вещать - должно отправляться событие, что музыка не мешает. И тогда приложение, воспроизводящее музыку должно возобновить воспроизведение. Причем это укладывается в логику, что мы не заморачиваемся играло что-то до этого или нет.
Я это сам не пробовал, но из описания из указанного выше раздела документации - оно работает так.
Если бы у меня была бы такая проблема, я бы сначала в андроид студио накидал приложение и подписался на эти события, посмотрел, что происходит, когда 1С начинает и заканчивает вещать.
И если второго события нет (платформа не шлет) , думал бы как его из 1С сгенерить самостоятельно.
Вы вот это точно попробовали?
СредстваМультимедиа.ОстановитьВоспроизведениеТекста();
Или только
СредстваМультимедиа = Неопределено;?
(15) понимаю, но опять же - хочется ООП.
Дал команду - сказало текст, закончило - всё.
--
немного в сторону отойду, но доступ к файлу по пути, полученному из диалога открытия после переоткрытия программы тоже не работает. Причина плюс-минус ясна - 1С не инициализировала провайдеров доступа при попытке получить файл - но не я же буду это делать за 1С ?
Так и тут - мне не хватит сил найти какой intent послать системе, чтобы она поняла, что произношение текста закончилось.
Если кто умеет и поделится - с меня бонус, а пока ждём реакцию поддержки.