Тип: МенеджерСредствУстройства. Предоставляет доступ к средствам устройства.
Полное описание, параметры и ограничения
Глобальный контекст.СредстваУстройства (Global context.DeviceTools)
Глобальный контекст (Global context)
СредстваУстройства (DeviceTools)
Доступен, начиная с версии 8.3.13.
Использование:
Только чтение.
Описание:
Тип: МенеджерСредствУстройства.
Предоставляет доступ к средствам устройства.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.3.13.
Методическая информация
Практические примеры
Отдельные команды включения и выключения фонарика
Две команды реально меняют состояние фонарика, не выключая его немедленно в той же процедуре.
Где и как запускать
Клиент собственного мобильного приложения или мобильный клиент, как указано в подготовке. Устройство здесь не использовалось.
Подготовка
Собственное мобильное приложение или мобильный клиент на устройстве с поддерживаемым фонариком и нужными разрешениями.
Подключите две свои команды к двум процедурам. Сначала включите, затем отдельно выключите фонарик.
&НаКлиенте
Процедура ВключитьСвет()
СредстваУстройства.ВключитьФонарик(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьСвет()
СредстваУстройства.ВключитьФонарик(Ложь);
КонецПроцедурыРазбор по шагам
Истина включает фонарик.
Наблюдаем реальное устройство, а не сообщение о вызове.
Ложь в отдельной команде выключает его.
Как проверить результат
После первой команды свет включён на поддерживаемом устройстве.
После второй свет выключен.
Ожидаемый результат
Контрольный результат описывает будущую ручную проверку в подготовленном учебном окружении. Выполнение в 1С здесь не проверялось.
На что обратить внимание
Нет гарантии поддержки фонарика на каждом устройстве. Ошибка не означает, что выключение уже выполнено.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
СредстваУстройства: настоящий ответ о фотовспышке без включения фонарика
В собственном новом Android-приложении получите нативный менеджер и преобразуйте его настоящий Булево-ответ в понятный диагностический вердикт. Исходное значение флажка не выдавайте за выполненную проверку.
Где и как запускать
Свое отдельное новое Android ARM64 developer mobile-platform приложение; только МобильноеПриложениеКлиент. Локальный МобильноеПриложениеСервер нужен только для scalar guard своего пакета. Фактическая версия отдельно, минимум8.3.13.
Подготовка
Будущий ручной урок — только свое отдельное новое Android ARM64 лабораторное устройство и свое новое пустое приложение. Не личный телефон, не рабочая ИБ и не существующий профиль. Здесь 1С, устройство, сеть и SDK не запускались; просмотр справочника ничего не делает.
Создайте с нуля свою конфигурацию УчебныеСредства85 без прикладных данных: Версия ровно 6bed6a57-8b9e-41e2-80fe-eed26881eefc, режим совместимости Не использовать, назначение использования Приложение для мобильной платформы. Метка идентифицирует учебный пакет, не является криптографическим доказательством и не гарантирует приватность устройства.
Общие → Общие формы: создайте ровно две управляемые формы ГлавнаяСредств85 и ПультВспышки85. У главной формы создайте команду ОткрытьПроверку85, одноименный обработчик и кнопку. Вставьте поддерживающий полный модуль главной формы. Добавьте ее в рабочую область начальной страницы; кнопка только открывает свой пульт.
У ПультВспышки85 создайте реквизиты СогласенНаПроверку85 (Булево, исходно Ложь), ОтветПолучен85 и ФотовспышкаПоAPI85 (Булево), ВерсияRuntime85 и Вердикт85 (Строка неограниченной длины). Выведите флажок согласия и поля наблюдения. Все поля наблюдения ТолькоПросмотр=Да; ОтветПолучен85 нужен, чтобы отличать исходное Ложь от настоящего ответа API.
Создайте собственную команду ПроверитьВспышку85, обработчик ПроверитьВспышку85(Команда) и кнопку команды. Свяжите событие формы ПриОткрытии с ПриОткрытии(Отказ). Полный MAIN вставьте в модуль ПультВспышки85. События и команды не вызывайте вручную.
В обоих модулях серверный helper имеет &НаСервереБезКонтекста, выполняется только МобильноеПриложениеСервер и возвращает Булево. Проверяются имя/версия собственной CF и обе формы. Нативный менеджер или device-объекты через RPC не передаются.
Вручную проверьте свою конфигурацию для Мобильное приложение — клиент и Мобильное приложение — сервер, целостность и неподдерживаемые функции. При ошибках остановитесь. Маршрут поставки уже документирован: Конфигурация → Мобильное приложение → Публиковать… только в свой новый виртуальный каталог OwnDeviceTools85_<ownGUID> и свою новую папку VM/IIS. Это мобильная конфигурация, не сборка APK и не подключение рабочей ИБ.
На своем стенде используйте фактически полученную официальную developer mobile platform 1cem-arm64.apk, не 1cem-client-arm64.apk и не 1cem-standalone-arm64.apk. Затем + → Address = реальный URL своей private VM/IIS с точным именем собственной публикации → Load → имя УчебныеСредства85 → OK/Done → открыть свое приложение. Не localhost телефона и не придуманный URL. Здесь нет скачивания, установки, публикации или SDK-автоматизации.
Официальный маршрут публикации: https://1c-dn.com/library/publishing_of_1c_mobile_application/ ; developer ARM64 и импорт: https://1c-dn.com/library/tutorials/1c_enterprise_development_tools_user_guide/ ; собственная первая мобильная ИБ: https://1c-dn.com/library/tutorials/first_application_mobile_platform/ . Это инструкция будущей ручной подготовки, не подтверждение текущего runtime.
ВерсияRuntime85 показывает действительную мобильную версию. СредстваУстройства доступны начиная с8.3.13; установленная Windows8.5.1.1343 не доказывает версию APK. Другой контекст, несовпадающая собственная метка, ошибка API или неправильный тип — STOP без fallback.
Прочитайте границы и отдельно поставьте флажок только для одной readonly проверки. Одно нажатие сразу потребляет согласие. MAIN получает настоящий readonly global СредстваУстройства, затем один раз вызывает ПоддерживаетсяФонарик() без параметров. Форма при открытии не выполняет эту диагностику.
На выбранном Android native Истина означает наличие фотовспышки. Ложь — допустимый диагностический ответ, не результат отмены и не повод вызвать переключение или подставить другой manager. Только после настоящего Булево поле ОтветПолучен85 становится Истина; вердикт и наблюдаемый флажок получаются из фактического ответа.
Проверка не сообщает текущее состояние лампы, не включает и не выключает ее, не проверяет успешность включения и не выдает разрешение ОС. Это не ПоддерживаетсяФункциональностьМобильногоПриложения: тот API проверяет включение возможностей в сборку. Не добавляйте декоративный вызов другого capability или запрос разрешений ради этого урока.
После ошибки/неожиданного ответа — STOP; автоматической повторной попытки нет. Состояние согласия принадлежит этому экземпляру формы и не обещано переживающим закрытие/перезапуск. Не переоткрывайте форму для обхода STOP. Контакты, камера/фотографии, SMS, набор номера, cloud/network, чужие данные и изменение настроек здесь не используются.
&НаКлиенте
Перем СогласиеИспользовано85, Остановка85;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если СогласиеИспользовано85 <> Неопределено Или Остановка85 <> Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
СогласиеИспользовано85 = Ложь;
Остановка85 = Истина;
СогласенНаПроверку85 = Ложь;
ОтветПолучен85 = Ложь;
ФотовспышкаПоAPI85 = Ложь;
Вердикт85 = "Проверка еще не выполнялась; исходный флажок не является ответом API";
Попытка
ВерсияRuntime85 = ПроверитьМобильнуюВерсию85();
Остановка85 = Ложь;
Исключение
Остановить85(ОписаниеОшибки());
Отказ = Истина;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Остановить85(Причина)
Остановка85 = Истина;
СогласенНаПроверку85 = Ложь;
Вердикт85 = "STOP. Новая попытка запрещена. " + Причина;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВспышку85(Команда)
Попытка
#Если МобильноеПриложениеКлиент Тогда
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда <> Команды.Найти("ПроверитьВспышку85")
Или Остановка85 <> Ложь Или СогласиеИспользовано85 <> Ложь
Или СогласенНаПроверку85 <> Истина Тогда
ВызватьИсключение "Нужна собственная команда и отдельное неиспользованное согласие";
КонецЕсли;
СогласиеИспользовано85 = Истина;
СогласенНаПроверку85 = Ложь;
Если ВерсияRuntime85 <> ПроверитьМобильнуюВерсию85() Тогда
ВызватьИсключение "Фактическая версия приложения изменилась";
КонецЕсли;
Менеджер = СредстваУстройства;
Если ТипЗнч(Менеджер) <> Тип("МенеджерСредствУстройства") Тогда
ВызватьИсключение "Не получен настоящий native менеджер средств устройства";
КонецЕсли;
ЕстьВспышка = Менеджер.ПоддерживаетсяФонарик();
Если ТипЗнч(ЕстьВспышка) <> Тип("Булево") Тогда
ВызватьИсключение "Native API не вернул Булево; ответ не подменяем Ложь";
КонецЕсли;
ФотовспышкаПоAPI85 = ЕстьВспышка;
ОтветПолучен85 = Истина;
Если ЕстьВспышка Тогда
Вердикт85 = "API сообщил наличие фотовспышки на Android. Фонарик не включался";
Иначе
Вердикт85 = "API не подтвердил наличие фотовспышки на Android. Это допустимый ответ Ложь";
КонецЕсли;
#Иначе
ВызватьИсключение "Диагностика запрещена в другой среде";
#КонецЕсли
Исключение
Остановить85(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьМобильнуюВерсию85()
#Если МобильноеПриложениеКлиент Тогда
Информация = Новый СистемнаяИнформация;
Версия = Информация.ВерсияПриложения;
Если ПроверитьСвойПакетНаСервере85() <> Истина Тогда
ВызватьИсключение "Не подтверждена собственная метка мобильного пакета";
КонецЕсли;
Возврат Версия;
#Иначе
ВызватьИсключение "Только свое мобильное приложение, без desktop/mobile-client fallback";
#КонецЕсли
КонецФункции
&НаСервереБезКонтекста
Функция ПроверитьСвойПакетНаСервере85()
#Если МобильноеПриложениеСервер Тогда
Если Метаданные.ОбщиеФормы.Количество() <> 2 Или Метаданные.ОбщиеФормы.Найти("ГлавнаяСредств85") = Неопределено Или Метаданные.ОбщиеФормы.Найти("ПультВспышки85") = Неопределено Тогда
ВызватьИсключение "Не совпадает собственная новая учебная мобильная конфигурация";
КонецЕсли;
Возврат Истина;
#Иначе
ВызватьИсключение "Нужен локальный сервер своего мобильного приложения, не desktop ИБ";
#КонецЕсли
КонецФункции
Полный модуль собственной главной формы: только открыть свой пульт
Своя CF → Общие → Общие формы → ГлавнаяСредств85 → полный управляемый модуль
МобильноеПриложениеКлиент; собственный scalar server guard только МобильноеПриложениеСервер. Проверяется метка/фактическая версия, затем ОткрытьФорму своего пульта; device-tools query и лампа не вызываются.
&НаКлиенте
Процедура ОткрытьПроверку85(Команда)
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда <> Команды.Найти("ОткрытьПроверку85") Тогда
ВызватьИсключение "Нужна собственная команда главной формы";
КонецЕсли;
ПроверитьМобильнуюВерсию85();
ОткрытьФорму("ОбщаяФорма.ПультВспышки85");
КонецПроцедуры
&НаКлиенте
Функция ПроверитьМобильнуюВерсию85()
#Если МобильноеПриложениеКлиент Тогда
Информация = Новый СистемнаяИнформация;
Версия = Информация.ВерсияПриложения;
Если ПроверитьСвойПакетНаСервере85() <> Истина Тогда
ВызватьИсключение "Не подтверждена собственная метка мобильного пакета";
КонецЕсли;
Возврат Версия;
#Иначе
ВызватьИсключение "Только свое мобильное приложение, без desktop/mobile-client fallback";
#КонецЕсли
КонецФункции
&НаСервереБезКонтекста
Функция ПроверитьСвойПакетНаСервере85()
#Если МобильноеПриложениеСервер Тогда
Если Метаданные.ОбщиеФормы.Количество() <> 2 Или Метаданные.ОбщиеФормы.Найти("ГлавнаяСредств85") = Неопределено Или Метаданные.ОбщиеФормы.Найти("ПультВспышки85") = Неопределено Тогда
ВызватьИсключение "Не совпадает собственная новая учебная мобильная конфигурация";
КонецЕсли;
Возврат Истина;
#Иначе
ВызватьИсключение "Нужен локальный сервер своего мобильного приложения, не desktop ИБ";
#КонецЕсли
КонецФункции
Разбор по шагам
Подготовьте именно свои две формы и свой пакет; откройте пульт настоящей командой главной формы. Прочитайте фактическую мобильную версию.
До команды ОтветПолучен85=Ложь: значение ФотовспышкаПоAPI85 еще не является результатом. Прочитайте границы и отдельно согласитесь только на readonly query.
Один раз нажмите ПроверитьВспышку85. Собственная команда и согласие проверяются до native producer; согласие сразу потребляется.
СредстваУстройства — readonly global, не конструктор. MAIN получает и проверяет именно МенеджерСредствУстройства, затем реально вызывает его zero-argument ПоддерживаетсяФонарик().
Только настоящий Булево меняет ОтветПолучен85 на Истина. Native ответ сохраняется в поле и потребляется условием: отдельный понятный текст для Истина и для Ложь.
Сверьте вердикт с фактическим флажком. Никакое управление лампой не следует ни за Истина, ни за Ложь. При ошибке STOP без retry и подмены результата.
Как проверить результат
MAIN получает настоящий manager через readonly global; выдуманный Новый МенеджерСредствУстройства и входной ИсходныйОбъект отсутствуют.
После одной настоящей команды native метод вызван один раз без аргументов. Тип ответа должен быть Булево; Неопределено или другие значения не превращаются в Ложь.
ОтветПолучен85 отделяет начальное значение поля от настоящего результата. ФотовспышкаПоAPI85 и обе ветви Вердикт85 зависят от actual response.
Нет ВключитьФонарик даже с Ложь, нет ручных событий, контактной книги, звонков/SMS, разрешений или сети в MAIN/HOME.
Ожидаемый результат
Ожидаемый ручной результат: ОтветПолучен85=Истина и фактический Булево в ФотовспышкаПоAPI85; текст соответствует этому ответу. Фонарик не включался. Здесь native query и runtime не проверены.
На что обратить внимание
На Android метод документирует наличие фотовспышки; на iOS/Windows Mobile дополнительно требуется поддержка режима фонарика. Урок выбирает только Android и не переносит туда чужое значение контракта.
Истина не доказывает текущее включение, успешный будущий контроль лампы или разрешение ОС. Ложь здесь допустим и не является флагом отмены.
Тип МенеджерСредствУстройства не создается через Новый: документированный producer — глобальное свойство СредстваУстройства только для чтения.
ВключитьФонарик — отдельная реальная аппаратная операция. Она намеренно не вызывается и не получает PRIMARY за dummy-call; этот урок не учит уборке или восстановлению неизвестного состояния лампы.
Consumed-согласие и STOP принадлежат одному экземпляру формы; нет обещания сохранения после закрытия/перезапуска.
Результат статических проверок не заменяет тест на собственном лабораторном устройстве; здесь устройство, 1С и SDK не запускались.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.