Материалы, которые использовал для создания приложений:
- Уроки по созданию приложения для взаимодействия с 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
Другие разработки, которые могут вас заинтересовать:
Вступайте в нашу телеграмм-группу Инфостарт