Вы находитесь на странице: 1из 10

Ministerul Educației, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare Informatică și Microelectronică
Departamentul Ingineria Software și Automatică

Raport
Лабораторной работы nr. 2
Comunicații hibride

Тема: Бесконтактная связь NFC

Выполнил: ст.гр. TI-186, Шакенко Алексей


Проверил: asis. univ., M. Zalesciuc

Chișinău 2021
Задачи и цели:
Использование уже существующего приложения для прогрмирования датчика NFC на
мобильном телефоне с целью считывания данных с смарт-карты. банковская карта, смарт-ключ, и т. д
..
Создание мобильного приложения, использующего датчик NFC телефона для чтения смарт-
карты, банковской карты, ключей и т. д.
Теоретические понятия
Near Field Communication (NFC)или ближняя полевая связь-это технология, основанная на
радиочастотной идентификации RFID, которая позволяет смартфонам и другим устройствам
общаться друг с другом через прикосновение или близость на расстоянии менее 10 см. Чтобы
передача работала, оба устройства должны иметь чип NFC. NFC относится к категории беспроводных
технологий, обеспечивающих связь на коротких расстояниях, таких как Bluetooth, Wi-Fi, IrDA, RFID,
Zigbee.
Особенности NFC:
* Скорость связи: 106, 212 или 424 Кбит/с
* Диапазон частот: 13,56 МГц
* Режим связи: одно из устройств называется инициатором, имеющим активную роль, а другое
называется мишенью, с пассивной ролью. Согласно NFCIP-2, определены 3 режима работы :
modul режим эмуляции карты-устройство NFC ведет себя как смарт-карта, он работает в
пассивном режиме; если терминал является совместимым мобильным телефоном, SIM-карта
оператора может использоваться в качестве элемента безопасности, сохраняя зашифрованную
информацию 
модуль режим чтения / записи-устройство ведет себя как активный считыватель/писатель карт
и этикеток, создавая электромагнитное поле для чтения / записи пассивных устройств NFC; этот
режим позволяет считывать информацию, приближаясь к мобильному устройству перед
электронными этикетками, упаковками или картами 
modul режим P2P (одноранговый)-устройства NFC взаимодействуют как пассивно, так и
активно; этот режим позволяет двум мобильным терминалам обмениваться информацией,
фотографиями, видео, данными и т. д. Samsung улучшила систему, заменив связь bluetooth на прямое
соединение Wi-Fi.Utilizări ale NFC:
* Системы контроля доступа: доступ в здания, активация или запуск компьютеров,
автотранспортных средств, посадка на самолет и т. д.
* Электронные платежные системы: приложения в мобильных телефонах с функцией NFC
могут использоваться для осуществления платежей у торговцев. С информацией о банковской карте
на устройстве NFC оплата может быть достигнута быстро.
• Подключение к тегам NFC: эти ярлыки, расположенные дома, на работе, в меню в ресторане,
на рекламе продукта или в машине, могут автоматически включать ряд настроек, приложений и
объектов на вашем мобильном телефоне, когда он близок к ним (отключает подключение к данным и
запускает его на Wi-fi, создает SMS и отправляет его на один или несколько контактов, запускает
приложение, изменяет настройку телефона, доступ к веб-странице, активирует будильник телефона и
т. д.).
* Передача данных: передача контактов или файлов с одного телефона на другой
* Синхронизация между устройствами: NFC может использоваться для синхронизации с
мобильных устройств, таких как наушники, колонки, воспроизведение мультимедиа,
маршрутизаторы, планшеты или консоли с NFC. Эта технология также принимается
автопроизводителями, потому что ее можно использовать для быстрой синхронизации телефона
водителя с мультимедийными системами автомобиля

Создание приложения в Android Studio


Добавление зависимостей в файл gradle является важным этапом, поскольку зависимости
позволяют нам включать внешнюю библиотеку или локальные файлы jar или другие библиотечные
модули в проект Android.

dependencies {
implementation 'com.github.pro100svitlo:creditCardNfcReader:1.0.3'
implementation 'com.example.creditcardlibrary:cardview:0.0.15'
implementation 'com.vinaygaba:creditcardview:1.0.4'
}

С помощью разрешений мы указываем определенные системные разрешения, которые


пользователь должен предоставить для правильной работы приложения.

<uses-permission android:name="android.permission.NFC" />

В файле AndroidManifest.xml также присутствует активность, которая начнется, когда NFC


сканирует карту рядом с экраном устройства.
<activity android:name=".CardActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>

С помощью методов setCardNumber, setExpiryDate и setCardNumberFormat происходит


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

creditCardView.setCardNumber(Objects.requireNonNull(intent.getStringExtra("CARD_NUM")));
creditCardView.setExpiryDate(Objects.requireNonNull(intent.getStringExtra("CARD_EXP_DATE")));
creditCardView.setCardNumberFormat(MASKED_ALL_BUT_LAST_FOUR);

При использовании коммутатора происходит выбор типа карты, в нашем случае у нас есть два
типа карт, а именно VISA и MasterCard.

int cardType = CardType.AUTO;


switch (Objects.requireNonNull(intent.getStringExtra("CARD_TYPE"))) {
case "VISA": {
cardType = CardType.VISA;
break;
}
case "MASTER_CARD": {
cardType = CardType.MASTERCARD;
break;
}
}
С помощью метода setContentView, который является частью класса
android.приложение.Activity, помогает установить наш контент или воспроизвести наш внешний вид
на экране. R представляет ресурс, макет представляет дизайн, и activity_main является XML-файл,
который был создан в res - > layout - > activity_main.xml.

setContentView(R.layout.activity_main);

Nfcadapter представляет локальный адаптер NFC. Был использован помощник, который


помогает нам получить адаптер NFC по умолчанию для этого устройства Android. То есть происходит
получение экземпляра nfcadapter по умолчанию, вызывающего статический метод getDefaultAdapter.

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);

Если возвращенный nfcadapter является нулевым, мы показываем тост для пользователя с


сообщением "NFC module not found".

if (mNfcAdapter == null) {
Toast.makeText(getApplicationContext(), "NFC module not found",
Toast.LENGTH_LONG).show();
} else {
//do something if there are nfc module on device

mCardNfcUtils = new CardNfcUtils(this);


mIntentFromCreate = true;
onNewIntent(getIntent());
}

В методе onResume проверка включена ли NFC путем вызова метода isEnabled на экземпляре
nfcadapter. Если возвращенный nfcadapter является true, мы показываем тост для пользователя с
сообщением "NFC module is not available".

protected void onResume() {


super.onResume();
mIntentFromCreate = false;
if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) {
//show some turn on nfc dialog here. take a look in the sample
Toast.makeText(getApplicationContext(), "NFC module is not available",
Toast.LENGTH_SHORT).show();
} else if (mNfcAdapter != null){
mCardNfcUtils.enableDispatch();
}
}

В методе onPause важно отключить диспетчер на переднем плане, обратившись к методу


disableDispatch в экземпляре nfcadapter.

public void onPause() {


super.onPause();
if (mNfcAdapter != null) {
mCardNfcUtils.disableDispatch();
}
}

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

protected void onNewIntent(Intent intent) {


super.onNewIntent(intent);
if (mNfcAdapter != null && mNfcAdapter.isEnabled()) {
//this - interface for callbacks
//intent = intent
//mIntentFromCreate - boolean flag, for understanding if onNewIntent() was called from
onCreate or not
mCardNfcAsyncTask = new CardNfcAsyncTask.Builder(this, intent, mIntentFromCreate)
.build();
}
}

С помощью метода startNfcReadCard мы показываем тост для пользователя с сообщением


"Scanning in progress"..."это означало бы, что он начал процесс сканирования карты с помощью NFC.

public void startNfcReadCard() {


Toast.makeText(getApplicationContext(), "Scanning in progress...",
Toast.LENGTH_SHORT).show();
}
С помощью метода cardIsReadyToRead мы проверяем, готова ли карта для чтения, и
необходимые для этого данные: CARD_NUM-16-значный номер карты; CARD_EXP_DATE - дата
истечения срока действия карты, а именно месяц, год; CARD_TYPE - тип карты VISA или
MASTERCARD.

public void cardIsReadyToRead() {


String card = mCardNfcAsyncTask.getCardNumber();
String expiredDate = mCardNfcAsyncTask.getCardExpireDate();
String cardType = mCardNfcAsyncTask.getCardType();

Intent intent = new Intent(getApplicationContext(), CardActivity.class);

//Add extended data to the intent


intent.putExtra(„CARD_NUM”, card);
intent.putExtra(„CARD_EXP_DATE”, expiredDate);
intent.putExtra(„CARD_TYPE”, cardType);
startActivity(intent);
}

С помощью метода doNotMoveCardSoFast пользователь будет уведомлен, чтобы не быстро


перемещать карту во время сканирования.

Public void doNotMoveCardSoFast() {


//notify user do not move the card
}

С помощью метода cardWithLockedNfc пользователь будет уведомлен, что текущая карта


заблокирована тег NFC и не может быть отсканирован.

Public void cardWithLockedNfc() {


//notify user that current card has locked nfc tag
}

С помощью метода finishNfcReadCard мы показываем тост для пользователя с сообщением


"Scanning finished", что означало бы, что процесс сканирования карты был завершен.
Public void finishNfcReadCard() {
Toast.makeText(getApplicationContext(), „Scanning finished”, Toast.LENGTH_SHORT).show();
}

Результаты компиляции на реальном устройстве

Рисунок 1-интерфейс приложения на устройстве Android


Рисунок 2-чтение карты с помощью NFC

Выводы:
Выполняя данную лабораторную работу я познакомился с Near Field Communication, сокращенной
NFC, которая представляет собой технологию беспроводной связи на коротком расстоянии,
основанную на стандартах, которая позволяет использовать простые и безопасные двусторонние
взаимодействия между электронными устройствами. Это позволяет потребителям совершать
бесконтактные транзакции, получать доступ к цифровому контенту и подключать электронные
устройства одним касанием. Near Field Communication объединяет различные проприетарные
стандарты и технологии, найденные в миллионах автономных бесконтактных карт.

Бесконтактная технология позволяет пользователям оплачивать транзакции, просто удерживая карты


близко, вместо того, чтобы проходить через читателя. В настоящее время наиболее широко
используемыми потребительскими приложениями NFC являются кредитные карты „wave to pay”,
разрешения на транзитную систему или билеты и безопасный вход в здание. В нынешнее время NFC
широко распространено в странах 3 мира где стараются убрать все физические деньги, так как это
становится актуально.

Библиотека ресурсов:
1. Near Field Communication - https://ro.wikipedia.org/wiki/Near_Field_Communication
2. NFC - https://securityrussia.com/blog/nfc.html
3. NFC basics - https://developer.android.com/guide/topics/connectivity/nfc/nfc
4. Android NFC Read and Write Example - https://www.androidauthority.com/how-to-use-nfc-android-164644/
5. Class CreditCard - https://docs.oracle.com/en/cloud/paas/mobile-suite/sdk-bots-
android/oracle/cloud/mobile/core/CreditCard.html#setExpMonth-int-
6. Create a NFC Reader Application for Android - https://www.youtube.com/watch?v=TPR2FnrJHz4
7. The Near Field Communication Information Technology – https://www.ukessays.com/essays/information-
technology/the-near-field-communication-information-technology-essay.php

Вам также может понравиться