[mobile] Взаимодействие с NFC через мобильную платформу 1С

17.11.20

Разработка - Мобильная разработка

Цель была научиться взаимодействовать с внешними приложениями из приложения на мобильной платформе 1С. Для данной цели выбрал тему чтение/запись NFC меток. Было разработано: 1) приложение в android studio, которое взаимодействует с NFC 2) приложение на мобильное платформе 1с, которое взаимодействует с разработанным приложением в android studio.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Взаимодействие с NFC через мобильную платформу 1С:
.zip 48,60Mb ver:0.0.6
56
56 Скачать (1 SM) Купить за 1 850 руб.

Материалы, которые использовал для создания приложений:

  1. Уроки по созданию приложения для взаимодействия с NFC в android studio   Вам нужно только повторять за автором и на выходе вы получите функционал по чтению и записи меток.
  2. Статьи на инфостарте "Мобильное приложение 1С и приложение Java. Совместная работа через Intent. " в них очень подробно расписано, как "подружить" приложения:

Всегда актуально: Курс Дмитрия Шерстобитова на курсах-1с.рф

Функционал, который получилось реализовать:

  • Получение состояния (включено/выключено)
  • Переход в настройки
  • Запись (в тестовой записи текст вшит в приложение на android studio, в обычной записи текст передается из приложения на мобильной платформе 1С)
  • Чтение с передачей ID метки и содержимого в приложение на МП 1С. Т.к поддерживается только Ndef то формат передается просто текстом.
  • Установка внешнего приложения из приложения на МП 1С.

Приведу пример кода некоторых функций на стороне МП 1С и android studio:

Получение состояния (включено/выключено)

Код в 1С:

&НаКлиенте
Процедура ПолучитьСостояниеNFC()
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
		НовВз.Действие="ru.mp.intent.action.NFCstate";
		НовВз.Запустить(Истина);
		
		Для Каждого Стр Из НовВз.ДополнительныеДанные Цикл
			Если Стр.Ключ = "state" Тогда 
				СостояниеNFC = Стр.Значение; 
			КонецЕсли;
		КонецЦикла;
	#КонецЕсли
КонецПроцедуры

Код в android studio:

    NfcAdapter nfcAdapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nfc_state);
 
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
 
        //++ определим состояние NFC Урок 1
       String textState = new String();
       Boolean StateNfc = false;
        if (nfcAdapter != null && nfcAdapter.isEnabled()) {
            textState = "NFC Включено";
            android.widget.Toast.makeText(this, textState, Toast.LENGTH_SHORT).show();
            StateNfc = true;
        }else{
            textState = "NFC Выключено";
            android.widget.Toast.makeText(this, textState, Toast.LENGTH_SHORT).show();
            StateNfc = false;
        }
        //-- определим состояние NFC Урок 1
 
        Intent intent = new Intent();
        intent.putExtra("state", StateNfc);
        setResult(RESULT_OK, intent);
        finish();
 
    }

Переход в настройки

Код в 1С:

&НаКлиенте
Процедура ВключитьОтключитьNFC(Команда)
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
		НовВз.Действие="ru.mp.intent.action.OnOffNFC";
		НовВз.Запустить(Истина);
	#КонецЕсли
КонецПроцедуры

Код в android studio:

    public  void ActionNFCSettings(){
        if (android.os.Build.VERSION.SDK_INT >= 16) {
            startActivity(new Intent(android.provider.Settings.ACTION_NFC_SETTINGS));
        } else {
            startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
        }
 
        this.finish();
    }

Тестовая запись

  @Override
    protected void onNewIntent(Intent intent) {
 
        //урок 3
        if(intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
            //android.widget.Toast.makeText(this, "NFC ТЕГ", Toast.LENGTH_SHORT).show();
 
            Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            NdefMessage ndefMessage = createNdefMessage("Android studio");
 
            writeNdefMessage(tag,ndefMessage);
            setResult(RESULT_OK);
            finish();
 
        }
    }

Записать

Код в 1С:

&НаКлиенте
Процедура ЗаписатьNFC(Команда)	
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
		НовВз.Действие="ru.mp.intent.action.WriteNFC";
		НовВз.ДополнительныеДанные.Добавить("textNFC", "Мобильная платформа 1С");
		НовВз.Запустить(Истина);
	#КонецЕсли	
КонецПроцедуры

Код в android studio:

    NfcAdapter nfcAdapter;
    public static String textNFC;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nfc_write);
 
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
 
        if (nfcAdapter != null && nfcAdapter.isEnabled()) {
 
        }else{
            android.widget.Toast.makeText(this, "NFC Выключено", Toast.LENGTH_SHORT).show();
            this.finish();
        }
 
        Intent intent = getIntent();
        textNFC = intent.getStringExtra("textNFC");
 
    }
 
    @Override
    protected void onNewIntent(Intent intent) {
 
        if(intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
            //android.widget.Toast.makeText(this, "NFC ТЕГ", Toast.LENGTH_SHORT).show();
                Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                NdefMessage ndefMessage = createNdefMessage(textNFC);
 
                writeNdefMessage(tag,ndefMessage);
                setResult(RESULT_OK);
                finish();
        }
    }

Тестировал только на Nexus 5 и на карте, которая поддерживает Ndef (ее хар-ки в изображениях).

Использовалась мобильная платформа 8.3.11, технологическая платформа 8.3.10

Содержимое архива:

1)  Два apk:

  • приложение на мобильной платформе 1С
  • приложение на android stuido

2) Конфигурация приложения 1С и архив проекта на android studio

Другие разработки, которые могут вас заинтересовать:

NFC RFID mifare мобильное приложение взаимодействие android studio java мобильная платформа

См. также

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38193    108    161    

201

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

3000 руб.

03.12.2018    59288    192    103    

172

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    97215    586    189    

321

Логистика, склад и ТМЦ Сканер штрих-кода Терминал сбора данных Мобильная разработка Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

3450 руб.

28.04.2023    9468    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4643    1    0    

6

Управление взаимоотношениями с клиентами (CRM) ServiceDesk, HelpDesk Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 1С:Управление торговлей 10 1С:Управление производственным предприятием Управленческий учет Платные (руб)

Автоматизируйте процесс управление задачами, организуйте линию поддержки для предприятия. Подключайте различные подразделения и организовывайте взаимодействия между ними (IT отдел, бухгалтерия, отдел кадров и т.д). Подсистема Service Desk (Сервис Деск) редакция 1.0 для УПП и других типовых конфигураций.

2280 руб.

17.12.2018    38200    17    36    

36

Мобильная разработка WEB-интеграция Программист Мобильная платформа Абонемент ($m)

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1215    6    informa1555    1    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. efin 15.04.18 12:00 Сейчас в теме
Здравствуйте!
Идея, безусловно, полезная, но взаимодействие мобильной платформы с нативными приложениями через Intent здесь давно описана с примерами и опробована.
Если Вы владеете и 1С и Java, очень прошу Вас написать внешнюю компоненту для мобильного приложения, делающую то же самое.
Технология описана на сайте ИТС.

Я не смог найти ни одного примера с исходниками, а так хочется иметь "печку", чтобы начать танцевать.
2. leobrn 633 15.04.18 12:12 Сейчас в теме
(1) в идеале я и хотел видеть этот функционал через внешнюю компоненту , но пока не удалось полностью разобраться с этим
3. CyberCerber 872 15.04.18 12:19 Сейчас в теме
5. пользователь 19.04.18 06:19
Сообщение было скрыто модератором.
...
4. PloAl 141 15.04.18 14:18 Сейчас в теме
В android, NFC тесно связан с текущей activity и получение данных в фоне неактивным activity невозможно.
Вышеописанное скорее всего сделано для безопасности приложений бесконтактной оплаты.
Из ВК, невозможно создать полноценную activity, с которым будет работать NFC.
SinglCOOLer; IgorKissil; +2 Ответить
6. user808274 28.05.18 21:52 Сейчас в теме
Я так же пытался сделать внешнюю компоненты для мобильной платформы, которая бы читала и писала nfc метки mifareclassic с возможностью установки ключей. Затык у меня произошёл из-за того, что мне не удавалось вызвать Activity, получающую Intent от NFC адаптера. У меня сложилось впечатление, что где-то происходит обращение к локальному указателю (в терминах jni), которые уже утратил актуальность.
Получить Intent то NFC адаптера каким-нибудь другим классом, обрабатывющим Intent-ы ( типа Service или BroadcastReceiver) и не имеющим проблем с вызовом из внешней компоненты, как у Activity, у меня не получилось.
Получать Intent то NFC могло только Actyvity, указанное адаптеру через enableForegroundDispatch.
Примечательно, что если компоненту не пересобирать, а оставить в виде Android приложение, то обработка nfc таким приложением происходила как надо.
Так же стоит указать, что действия с меткой должны происходить не по нажатию кнопки на форме, а по внесению метки в поле, а программа должна быть в состоянии готовности к определённым действиям.
Свою неудачу считаю лишь следствие недостаточности знаний, т.к., например, эти: www.rightscan.ru создать такую библиотеку удалось (не сочтите за рекламу) и её даже можно скачать с примером конфигурации для 1С.
7. IgorKissil 354 31.05.18 11:55 Сейчас в теме
(6) Ключевое слово, которое позволяет rightscan делать такие вещи - SafeDroid. Они изменили ядро ОС. В обычном андроиде ни работа с nfc без activity, на перехват клавиатуры невозможен (см здесь)
8. user808274 31.05.18 17:28 Сейчас в теме
(7)Не думаю, что они в ядре что-то меняли. Их компонента, работала, как на специализированном сканере, правда у них же купленном, так и на банальном Самсунге с NFC считывателем, и на гражданских телефонах корректно лесом слало (в отдельно открытом Activity), что нет NFC адаптера. Сейчас конечно уже всё итерации не упомню, в сентябре 2017 задачу бросил. С другой стороны, если бы в специализированном сканере было пропатченное ядро, то и мои усилия бы поди увенчались успехом - в основном тестил-то я на нём.
А про изменение ядра это они сами Вам рассказали, или догадка ?
9. IgorKissil 354 01.06.18 07:49 Сейчас в теме
(8) А как она работает с nfc, в отдельном окне или прямо из формы 1С? Если второе, то они либо используют какие-то недокументированные возможности андроид либо, что более вероятно, возможности технологии внешних компонент. Получить nfc адаптер в андроиде можно только в главном потоке приложения и только с привязкой к foreground activity. А внешняя компонента работает в отдельном потоке и не дает возможности получить текущее окно. NDK возможностей для работы с nfc не имеет.
Интересно, работает ли их компонента на других устройствах с физической клавиатурой? Эту тему я копал глубже и с гораздо большей вероятностью утверждаю, что с помощью ТВК перехватить нажатие клавиш невозможно, если только не использовать андроид под root.
10. user808274 01.06.18 12:18 Сейчас в теме
(9) В отдельном чёрном окне. Внизу по центру пишет "приложите метку", "адаптер не найден" или "адаптер выключен".
Пробовал обмануть, вызвав промежуточный класс уже из которого вызывать свою Activity. Т.е. что бы не средствами JNI на C++ на писать типа jenv->CallVoidMethod(activity_glob, runOnUiThread, runObject);
а на Яве, в среде Android, штатно, как белый человек. Безрезультатно. Промежуточный класс вызывается, работает, а с Activity облом
13. IgorKissil 354 03.07.18 11:26 Сейчас в теме
(6) После нашего обсуждения я нашел метод как открывать свои окна из ВК, думаю прикрутить к ним nfc со временем. Небольшая подсказка куда копать: https://developer.android.com/reference/android/app/Dialog
11. PloAl 141 02.07.18 15:35 Сейчас в теме
В jni предупреждают, не стоит использовать для всего подряд, так как встроенные функции в большинстве случаев будут быстрее.
В теории можно сделать foreground activity которая будет вызываться из ВК и взаимодействовать с nfc.
Но обмен данными с этим activity будет происходить через intent
моб. 1с -> jni -> activity nfc
моб. 1с <- jni <- activity nfc

логично что быстрее, передавать сразу intent без ВК
моб. 1с -> activity nfc
моб. 1с <- activity nfc
12. IgorKissil 354 03.07.18 11:21 Сейчас в теме
(11) А где эта activity будет задекларирована? Если в ВК, то ее открыть невозможно, activity должны быть включены в манифест главного приложения. Если писать отдельный apk, то для серьезной разработки это плохое решение
14. PloAl 141 03.07.18 13:41 Сейчас в теме
(12) Читайте внимательней, в (11) речь именно про плохое решение

Не суть важно где activity будет, суть в том что с ВК не уйти от передачи intent.
Т.к. даже разные activity одного приложения, передают информацию друг другу через intent.
15. IgorKissil 354 03.07.18 13:55 Сейчас в теме
(11) Как планируете принимать интент из 1С без ВК? Платформа умеет их только отправлять
16. PloAl 141 03.07.18 15:33 Сейчас в теме
Не планирую.
Годом ранее делал публикацию про NFC, intent возвращается также как в этой статье.

Но и без ЗапускПриложениеМобильногоУстройства и можно получить intent внутри моб. 1с, где то здесь были описаны решения, но можно просто посмотреть манифест внутри архива с платформой.
17. TPID 26.02.19 14:20 Сейчас в теме
А существуют ли опубликованные в google play приложения, которые позволили бы делать то же самое?
18. leobrn 633 26.02.19 14:23 Сейчас в теме
(17) не нашел приложение в маркете с которым можно было сделать взаимодействие на чтение/запись nfc поэтому пришлось изобретать . На gitе можно поискать разработки .
19. leobrn 633 11.09.20 04:46 Сейчас в теме
Подпишитесь на канал Очаковский Владимир скоро будут видео по созданию красивого интерфейса на мобильной платформе. Верстка интерфейса для мобильного приложения 1С. Разработка для курса #1
20. Fruit83 28 14.12.21 14:24 Сейчас в теме
Спасибо, мне помогла данная разработка в очень важном проекте.
21. rhtr 92 31.03.23 11:49 Сейчас в теме
Не хочет работать.
При чтении метки "Нет содержимого!".
В приложение "NFC Tools" читается корректно.
Android 11, всё что нужно установил.
Подскажите пожалуйста, что делаю не так?
Оставьте свое сообщение