МенеджерМетокNDEF.ОтключитьАктивноеСканирование

Методы · StopActiveScanning

При вызове метода завершается текущая сессия сканирования, скрывается интерфейс сканирования. При вызове данного метода в отсутствие сессии сканирования, то никаких действий выполнено не будет.

Синтаксис

ОтключитьАктивноеСканирование()
Полное описание, параметры и ограничения

МенеджерМетокNDEF.ОтключитьАктивноеСканирование (TagManagerNDEF.StopActiveScanning)

МенеджерМетокNDEF (TagManagerNDEF)

ОтключитьАктивноеСканирование (StopActiveScanning)

Доступен, начиная с версии 8.3.23.

Синтаксис:
ОтключитьАктивноеСканирование()
Описание:

При вызове метода завершается текущая сессия сканирования, скрывается интерфейс сканирования.
При вызове данного метода в отсутствие сессии сканирования, то никаких действий выполнено не будет.

Доступность:

Мобильный клиент, мобильное приложение (клиент).

Использование в версии:

Доступен, начиная с версии 8.3.23.

Методическая информация

Практические примеры

Необратимо запретить запись только на своей одноразовой учебной метке

ОПАСНО: после метода физическая метка НЕОБРАТИМО становится неперезаписываемой. Это отдельный рецепт с явным подтверждением, не проверка возможностей и не рекомендуемый обычный учебный шаг.

Где и как запускать

Полный клиентский модуль мобильной учебной формы. Только вручную подтверждённая операция на своём одноразовом NFC-носителе; не выполнялась здесь.

Подготовка

  1. ОПЕРАЦИЯ МЕНЯЕТ ФИЗИЧЕСКУЮ МЕТКУ. Только собственная дешёвая одноразовая учебная NFC-метка без ценных данных. Не запускайте на пропуске, платёжной карте, рабочем носителе или чужой метке.

  2. В отдельной мобильной учебной форме создайте строковые реквизиты МаркерУчебнойМетки и ПодтверждениеОперации. Добавьте команды НачатьУчебнуюОперацию и ОстановитьУчебнуюОперацию; назначьте одноимённые обработчики из полного модуля.

  3. Заранее подготовьте своей контролируемой NFC-утилитой только эту одноразовую метку: первая текстовая NDEF-запись — ваш уникальный маркер, например GUIDE_NDEF_TEST: плюс самостоятельно созданный UUID. Не используйте общий маркер для нескольких меток.

  4. Тот же собственный маркер вручную внесите в МаркерУчебнойМетки. Изначально ПодтверждениеОперации оставьте пустым: первый запуск должен остановиться без сканирования и без изменения.

  5. Перед разрешённым упражнением сохраните нужное содержимое вне носителя своим способом и физически отделите выбранную учебную метку от остальных. Проверка маркера защищает от случайного выбора, но не является криптографической проверкой владельца.

  6. Нужен поддерживающий NFC мобильный клиент/приложение. Физическая операция выполняется только если вы сами введёте точную фразу подтверждения и предъявите свою подготовленную метку; этот код здесь не запускался.

  7. САМОСТОЯТЕЛЬНОЕ РЕШЕНИЕ: упражнение необязательно для проверки устройства. Для разрешения введите ровно НЕОБРАТИМО ЗАБЛОКИРОВАТЬ МОЮ ОДНОРАЗОВУЮ МЕТКУ, только если готовы навсегда отказаться от её перезаписи.

&НаКлиенте
Процедура НачатьУчебнуюОперацию(Команда)
    Если ПустаяСтрока(МаркерУчебнойМетки) Тогда
        ВызватьИсключение "Сначала подготовьте собственную одноразовую метку с уникальным учебным маркером";
    КонецЕсли;
    Если ПодтверждениеОперации <> "НЕОБРАТИМО ЗАБЛОКИРОВАТЬ МОЮ ОДНОРАЗОВУЮ МЕТКУ" Тогда
        Сообщить("Подтверждения нет: сканирование и изменение метки не выполняются");
        Возврат;
    КонецЕсли;
    Менеджер = СредстваNFC.МеткиNDEF;
    Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование()
        ИЛИ НЕ Менеджер.ПоддерживаетсяЗаписьНаМетку() Тогда
        Сообщить("Нужные операции NFC не поддерживаются устройством");
        Возврат;
    КонецЕсли;
    Оповещение = Новый ОписаниеОповещения("СобственнаяУчебнаяМетка", ЭтотОбъект, МаркерУчебнойМетки);
    Менеджер.ВключитьАктивноеСканирование("Необратимая блокировка только своего одноразового носителя", Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ОстановитьУчебнуюОперацию(Команда)
    СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры

&НаКлиенте
Асинх Функция СобственнаяУчебнаяМетка(Метка, ОжидаемыйМаркер) Экспорт
    Если Метка = Неопределено Тогда
        Сообщить("Сканирование отменено; изменение не выполнялось");
        Возврат Неопределено;
    КонецЕсли;
    Если ПодтверждениеОперации <> "НЕОБРАТИМО ЗАБЛОКИРОВАТЬ МОЮ ОДНОРАЗОВУЮ МЕТКУ"
        ИЛИ ОжидаемыйМаркер <> МаркерУчебнойМетки Тогда
        Сообщить("Подтверждение или выбранный маркер изменились; операция остановлена");
        Возврат Неопределено;
    КонецЕсли;
    Попытка
        ДоОперации = Ждать Метка.ПолучитьСообщениеАсинх();
        Если ДоОперации.Записи.Количество() = 0 Тогда
            Сообщить("Нет собственного маркера; операция остановлена");
            Возврат Неопределено;
        КонецЕсли;
        Первая = ДоОперации.Записи[0];
        Если ТипЗнч(Первая) <> Тип("ТекстоваяЗаписьNDEF") Тогда
            Сообщить("Первая запись не является собственным текстовым маркером; операция остановлена");
            Возврат Неопределено;
        КонецЕсли;
        Если Первая.Текст <> ОжидаемыйМаркер Тогда
            Сообщить("Обнаружена другая метка; операция остановлена без изменения");
            Возврат Неопределено;
        КонецЕсли;
        Если НЕ (Ждать Метка.ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх()) Тогда
            Сообщить("Конкретная метка не поддерживает блокировку записи; метод не вызван");
            Возврат Неопределено;
        КонецЕсли;
        Если НЕ (Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх()) Тогда
            Сообщить("Запись уже недоступна; повторная блокировка не выполняется");
            Возврат Неопределено;
        КонецЕсли;
        Ждать Метка.ЗаблокироватьЗаписьНаМеткуАсинх();
        ДоступнаЗаписьПосле = Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх();
        Сообщить(ДоступнаЗаписьПосле = Ложь);
        Сообщить("Операция необратима: чтение остаётся доступным, возможность перезаписи не восстанавливается");
        Перечитано = Ждать Метка.ПолучитьСообщениеАсинх();
        Если Перечитано.Записи.Количество() > 0 Тогда
            Если ТипЗнч(Перечитано.Записи[0]) = Тип("ТекстоваяЗаписьNDEF") Тогда
                Сообщить(Перечитано.Записи[0].Текст = ОжидаемыйМаркер);
            КонецЕсли;
        КонецЕсли;
    Исключение
        Сообщить("Операция завершилась ошибкой: " + ОписаниеОшибки());
        Сообщить("После ошибки не объявляйте состояние носителя неизменным: перечитайте его отдельно");
        Возврат Неопределено;
    КонецПопытки;
    ПодтверждениеОперации = "";
    Возврат Неопределено;
КонецФункции

Разбор по шагам

  1. Сначала ознакомьтесь с примером проверки ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх без блокировки. Для изучения API обычно достаточно той безопасной проверки.

  2. Этот рецепт применяется только если вы сознательно готовы навсегда потерять возможность перезаписи своей дешёвой одноразовой метки. Вводится полная фраза НЕОБРАТИМО ЗАБЛОКИРОВАТЬ МОЮ ОДНОРАЗОВУЮ МЕТКУ.

  3. В обработчике заново проверяются подтверждение и прочитанный собственный маркер. Отмена, другая метка, отсутствие поддержки или уже недоступная запись останавливают операцию.

  4. ЗаблокироватьЗаписьНаМеткуАсинх по справке не имеет обратного метода разблокировки. Код не обещает резервную копию или программный откат физического состояния.

  5. После успешного метода проверяем фактическую недоступность записи и сохранённый маркер при чтении. Это не делает операцию обратимой.

  6. При ошибке после вызова считайте состояние неопределённым до отдельной проверки; не запускайте метод снова автоматически.

Как проверить результат

  1. Без точного ручного подтверждения никакая блокировка не происходит.

  2. Для сознательно выбранного своего одноразового носителя после успешного прохода запись недоступна — Истина; собственный маркер читается.

  3. Повторный проход не рассматривается как способ восстановить метку.

Ожидаемый результат

Только сознательно выбранная собственная одноразовая метка переводится в необратимое состояние чтения без перезаписи.

На что обратить внимание

  1. Последствие нельзя отменить средствами этого API. Не используйте как диагностический тест или на ценном носителе.

  2. Текстовый маркер — защита от случайного выбора, а не доказательство права собственности или защита от подделки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Записать свою учебную метку с сохранением маркера и перечитыванием

Пример настоящей записи, не имитация. До неё проверяются подтверждение, прочитанный маркер, поддержка записи и известная ёмкость; после — фактическое сообщение перечитывается.

Где и как запускать

Полный клиентский модуль мобильной учебной формы. Только вручную подтверждённая операция на своём одноразовом NFC-носителе; не выполнялась здесь.

Подготовка

  1. ОПЕРАЦИЯ МЕНЯЕТ ФИЗИЧЕСКУЮ МЕТКУ. Только собственная дешёвая одноразовая учебная NFC-метка без ценных данных. Не запускайте на пропуске, платёжной карте, рабочем носителе или чужой метке.

  2. В отдельной мобильной учебной форме создайте строковые реквизиты МаркерУчебнойМетки и ПодтверждениеОперации. Добавьте команды НачатьУчебнуюОперацию и ОстановитьУчебнуюОперацию; назначьте одноимённые обработчики из полного модуля.

  3. Заранее подготовьте своей контролируемой NFC-утилитой только эту одноразовую метку: первая текстовая NDEF-запись — ваш уникальный маркер, например GUIDE_NDEF_TEST: плюс самостоятельно созданный UUID. Не используйте общий маркер для нескольких меток.

  4. Тот же собственный маркер вручную внесите в МаркерУчебнойМетки. Изначально ПодтверждениеОперации оставьте пустым: первый запуск должен остановиться без сканирования и без изменения.

  5. Перед разрешённым упражнением сохраните нужное содержимое вне носителя своим способом и физически отделите выбранную учебную метку от остальных. Проверка маркера защищает от случайного выбора, но не является криптографической проверкой владельца.

  6. Нужен поддерживающий NFC мобильный клиент/приложение. Физическая операция выполняется только если вы сами введёте точную фразу подтверждения и предъявите свою подготовленную метку; этот код здесь не запускался.

  7. Для разрешённого прохода введите ровно ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ. Сначала испытайте отказ с пустым подтверждением. Предыдущая нагрузка будет заменена двумя учебными текстовыми записями.

&НаКлиенте
Процедура НачатьУчебнуюОперацию(Команда)
    Если ПустаяСтрока(МаркерУчебнойМетки) Тогда
        ВызватьИсключение "Сначала подготовьте собственную одноразовую метку с уникальным учебным маркером";
    КонецЕсли;
    Если ПодтверждениеОперации <> "ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ" Тогда
        Сообщить("Подтверждения нет: сканирование и изменение метки не выполняются");
        Возврат;
    КонецЕсли;
    Менеджер = СредстваNFC.МеткиNDEF;
    Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование()
        ИЛИ НЕ Менеджер.ПоддерживаетсяЗаписьНаМетку() Тогда
        Сообщить("Нужные операции NFC не поддерживаются устройством");
        Возврат;
    КонецЕсли;
    Оповещение = Новый ОписаниеОповещения("СобственнаяУчебнаяМетка", ЭтотОбъект, МаркерУчебнойМетки);
    Менеджер.ВключитьАктивноеСканирование("Запись только своей одноразовой учебной метки", Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ОстановитьУчебнуюОперацию(Команда)
    СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры

&НаКлиенте
Асинх Функция СобственнаяУчебнаяМетка(Метка, ОжидаемыйМаркер) Экспорт
    Если Метка = Неопределено Тогда
        Сообщить("Сканирование отменено; изменение не выполнялось");
        Возврат Неопределено;
    КонецЕсли;
    Если ПодтверждениеОперации <> "ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ"
        ИЛИ ОжидаемыйМаркер <> МаркерУчебнойМетки Тогда
        Сообщить("Подтверждение или выбранный маркер изменились; операция остановлена");
        Возврат Неопределено;
    КонецЕсли;
    Попытка
        ДоОперации = Ждать Метка.ПолучитьСообщениеАсинх();
        Если ДоОперации.Записи.Количество() = 0 Тогда
            Сообщить("Нет собственного маркера; операция остановлена");
            Возврат Неопределено;
        КонецЕсли;
        Первая = ДоОперации.Записи[0];
        Если ТипЗнч(Первая) <> Тип("ТекстоваяЗаписьNDEF") Тогда
            Сообщить("Первая запись не является собственным текстовым маркером; операция остановлена");
            Возврат Неопределено;
        КонецЕсли;
        Если Первая.Текст <> ОжидаемыйМаркер Тогда
            Сообщить("Обнаружена другая метка; операция остановлена без изменения");
            Возврат Неопределено;
        КонецЕсли;
        Если НЕ (Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх()) Тогда
            Сообщить("Конкретная метка не допускает запись");
            Возврат Неопределено;
        КонецЕсли;
        Записи = Новый Массив;
        Записи.Добавить(Новый ТекстоваяЗаписьNDEF(ОжидаемыйМаркер, "en"));
        Записи.Добавить(Новый ТекстоваяЗаписьNDEF("Книга", "ru"));
        НовоеСообщение = Новый СообщениеNDEF(Новый ФиксированныйМассив(Записи));
        Максимум = Метка.МаксимальныйРазмер;
        Если Максимум = Неопределено Тогда
            Сообщить("Ёмкость неизвестна; этот осторожный урок не выполняет запись");
            Возврат Неопределено;
        КонецЕсли;
        Если НовоеСообщение.Размер > Максимум Тогда
            Сообщить("Полное новое сообщение не помещается; запись остановлена");
            Возврат Неопределено;
        КонецЕсли;
        Ждать Метка.ЗаписатьСообщениеАсинх(НовоеСообщение);
        После = Ждать Метка.ПолучитьСообщениеАсинх();
        Если После.Записи.Количество() <> 2 Тогда
            ВызватьИсключение "После записи получено другое количество записей; перепроверьте свою метку";
        КонецЕсли;
        Если ТипЗнч(После.Записи[0]) <> Тип("ТекстоваяЗаписьNDEF")
            ИЛИ ТипЗнч(После.Записи[1]) <> Тип("ТекстоваяЗаписьNDEF") Тогда
            ВызватьИсключение "После записи получены другие типы записей";
        КонецЕсли;
        Сообщить(После.Записи[0].Текст = ОжидаемыйМаркер);
        Сообщить(После.Записи[1].Текст = "Книга");
        Сообщить("Сообщение перечитано с этой метки; необратимая блокировка не выполнялась");
    Исключение
        Сообщить("Операция завершилась ошибкой: " + ОписаниеОшибки());
        Сообщить("После ошибки не объявляйте состояние носителя неизменным: перечитайте его отдельно");
        Возврат Неопределено;
    КонецПопытки;
    ПодтверждениеОперации = "";
    Возврат Неопределено;
КонецФункции

Разбор по шагам

  1. Пустое подтверждение останавливает пример до открытия NFC-интерфейса. Для упражнения самостоятельно вводится точная фраза ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ.

  2. Метка сначала читается. Проверка первой текстовой записи и точного собственного маркера идёт раньше любых вызовов записи.

  3. Поддержка устройства и ПоддерживаетсяЗаписьНаМеткуАсинх конкретного носителя проверяются отдельно. Неизвестная ёмкость в этом уроке означает отказ от записи.

  4. Новое сообщение содержит прежний собственный маркер первой записью и Книга второй. В нём нет пустого СообщениеNDEF, которое очищало бы метку.

  5. После Ждать ЗаписатьСообщениеАсинх реальный носитель перечитывается. Сначала проверяются количество и типы, затем две строки.

  6. Ошибка после начала операции не гарантирует неизменность носителя. Пример прямо требует отдельно перечитать состояние; он не выдаёт ошибку проверки за успешный откат.

Как проверить результат

  1. Пустая фраза, чужой маркер, запрет записи, неизвестная/недостаточная ёмкость — понятный отказ до записи.

  2. На своей подготовленной метке после успешной записи/перечитывания — две Истина: сохранённый маркер и Книга.

  3. Подтверждение после завершённого прохода очищается; для повторной операции потребуется ручной ввод.

Ожидаемый результат

Собственная одноразовая метка действительно записана и перечитана только при выполнении всех защитных условий.

На что обратить внимание

  1. Старая полезная нагрузка заменяется новым сообщением: ценную метку этот урок использовать не должен.

  2. Достаточная ёмкость не защищает от потери контакта или аппаратной ошибки; обязательна проверка реального результата.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.