Материалы, которые использовал для создания приложений:
- Уроки по созданию приложения для взаимодействия с NFC в android studio Вам нужно только повторять за автором и на выходе вы получите функционал по чтению и записи меток.
- Статьи на инфостарте "Мобильное приложение 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
Другие разработки, которые могут вас заинтересовать: