СообщениеNDEF.Размер

Свойства · Size

Тип: Число. Размер сообщения в байтах.

Полное описание, параметры и ограничения

СообщениеNDEF.Размер (MessageNDEF.Size)

СообщениеNDEF (MessageNDEF)

Размер (Size)

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

Использование:
Только чтение.
Описание:
Тип: Число.
Размер сообщения в байтах.
Доступность:

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

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

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

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

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

Прочитать сообщение собственной метки и безопасно распознать неизвестную запись

Полный пример начала/отмены сеанса и асинхронного чтения. НеизвестнаяЗаписьNDEF получается от платформы при чтении, не создаётся поддельной Структура.

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

Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.

Подготовка

  1. Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.

  2. В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.

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

  4. Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.

  5. Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.

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

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

&НаКлиенте
Асинх Функция УчебнаяМеткаОбнаружена(Метка, ДополнительныеПараметры) Экспорт
    Если Метка = Неопределено Тогда
        Сообщить("Сканирование завершено без обнаруженной метки");
        Возврат Неопределено;
    КонецЕсли;
    Попытка
        Сообщение = Ждать Метка.ПолучитьСообщениеАсинх();
    Исключение
        Сообщить("Чтение метки не выполнено: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    Сообщить("Записей в считанном сообщении: " + Строка(Сообщение.Записи.Количество()));
    Сообщить("Размер считанного сообщения: " + Строка(Сообщение.Размер));
    Для Каждого Запись Из Сообщение.Записи Цикл
        Если ТипЗнч(Запись) = Тип("НеизвестнаяЗаписьNDEF") Тогда
            Сообщить("Платформа вернула запись неизвестного типа");
            Сообщить("Идентификатор заполнен: " + Строка(НЕ ПустаяСтрока(Запись.ИдентификаторЗаписи)));
            Данные = Запись.Данные;
            Если Данные = Неопределено Тогда
                Сообщить("Двоичная полезная нагрузка не определена");
            Иначе
                Сообщить("Размер неизвестной нагрузки, байт: " + Строка(Данные.Размер()));
            КонецЕсли;
        Иначе
            Сообщить("Тип известной записи: " + Строка(ТипЗнч(Запись)));
        КонецЕсли;
    КонецЦикла;
    Сообщить("Содержимое записей не выполнялось, URI не открывались, метка не изменялась");
    Возврат Неопределено;
КонецФункции

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

  1. Перед запуском проверяется ПоддерживаетсяАктивноеСканирование. Оповещение указывает на экспортную Асинх Функция с параметрами Метка и ДополнительныеПараметры, как требует справка.

  2. Отмена или завершение без метки передаёт Неопределено, поэтому обработчик выходит до чтения. Ошибка самого чтения имеет отдельную ветку.

  3. ПолучитьСообщениеАсинх вызывается через Ждать; результат — штатное сообщение с фиксированным массивом записей. Не считаем любой массив чужой метки гарантированно двухэлементным.

  4. НеизвестнаяЗаписьNDEF не имеет конструктора. Ветка с ней выполнится только если физическое сообщение действительно содержит неизвестный платформе тип; на обычной текстовой учебной метке может не выполниться.

  5. Для неизвестной записи проверяем Данные на Неопределено до Размер. Идентификатор проверяется только на заполненность; чужое содержимое не выводится и не интерпретируется.

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

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

  1. Отмена: сообщение завершения, без попытки чтения. Собственная метка: реальные количество, размер и типы записей.

  2. Неизвестный тип показывает отдельную ветку при реально подходящей метке; его появление не подделывается.

  3. Физические данные не изменены, секреты и URI не выводятся открытым текстом.

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

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

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

  1. Считанное содержимое недоверенно даже если оно имеет знакомый MIME или домен.

  2. Не подменяйте асинхронную функцию обработчика обычной процедурой: контракт здесь прямо требует функцию.

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

Проверить возможность и ёмкость метки, не записывая её

Сканируем только собственную учебную метку и сравниваем её ёмкость с подготовленным сообщением. Поддержка необратимой блокировки лишь читается — блокировка не выполняется.

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

Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.

Подготовка

  1. Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.

  2. В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.

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

  4. Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.

  5. Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.

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

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

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

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

  1. ПоддерживаетсяЗаписьНаМеткуАсинх относится к конкретной обнаруженной метке. Метод менеджера о поддержке устройства не заменяет эту проверку.

  2. ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх только сообщает возможность. Настоящая ЗаблокироватьЗаписьНаМеткуАсинх необратимо делает носитель неперезаписываемым и здесь не вызывается.

  3. МаксимальныйРазмер может быть Неопределено. В этой ветке не пытаемся сравнивать число с неизвестной ёмкостью и не заявляем успех.

  4. Для известной ёмкости сравниваем полный размер СообщениеNDEF, не число букв Книга и не число записей.

  5. Даже достаточный размер и поддержка записи не являются гарантией успешной будущей записи: контакт с меткой может быть потерян.

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

  1. Реальные признаки записи/блокировки и либо неизвестная ёмкость, либо сравнение размеров.

  2. Ни одна ветка не вызывает запись или блокировку. После запуска метка остаётся в прежнем состоянии.

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

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

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

  1. Не выполняйте необратимую блокировку как тест поддержки функции.

  2. Неизвестная ёмкость не равна нулю и не означает автоматически неограниченную ёмкость.

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

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

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

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

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