Для работы с NFC-адаптером используется классJCSNFCSession
.
Для проверки состояния NFC-адаптера используется метод JCSNFCSession.state
.
JCSNFCSession nfcSession = null;
JCSNFCSessionState state = JCSNFCSession.state(this);
if(state == JCSNFCSessionState.Unsupported) {
// NFC-адаптер отсутствует на мобильном устройстве
}
else if(state == JCSNFCSessionState.Disabled) {
// NFC-адаптер выключен
// Показать сообщение о необходимости включить NFC-адаптер
}
else {
// NFC-адаптер доступен для использования
// Создать экземпляр JCSNFCSession
nfcSession = new JCSNFCSession();
}
В том случае, если NFC-адаптер на мобильном устройстве выключен, можно открыть окно настроек NFC мобильного устройства, чтобы пользователь мог включить NFC-адаптер.
Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(intent);
Для подключения к NFC смарт-карте используются методы: JCSNFCSession.open
, JCSNFCSession.close
, JCSNFCSession.enableForegroundDispatch
, JCSNFCSession.disableForegroundDispatch
, JCSNFCSession.processIntent
, JCSDevice.close
.
Примечание
Для Activity, которое используется для детектирования подключения NFC смарт-карты, в файле манифеста (AndroidManifest.xml) значение параметра android:launchMode должно быть singleTask или singleInstance.
public class MainActivity extends AppCompatActivity {
private JCSNFCSession nfcSession = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Создать экземпляр JCSNFCSession
nfcSession = new JCSNFCSession();
// Подключиться к NFC смарт-карте
openDevice(device -> {
try {
// Выполнить операции со смарт-картой
}
finally {
// Закрыть подключение к смарт-карте
device.close();
}
});
}
private void openDevice(Consumer<JCSDevice> consumer) {
// Начать ожидание подключения к NFC смарт-карте
nfcSession.open((device, error) -> {
// Закончить ожидание подключения к NFC смарт-карте
nfcSession.close();
if(error != null) {
// Произошла ошибка при подключении к смарт-карте
return;
}
// Произошло успешное подключение к смарт-карте
// Выполнить операции со смарт-картой
consumer.accept(device);
});
}
@Override
public void onDestroy() {
super.onDestroy();
if(nfcSession != null) {
// Закончить ожидание подключения к NFC смарт-карте
nfcSession.close();
nfcSession = null;
}
}
@Override
public void onResume() {
super.onResume();
if(nfcSession != null) {
nfcSession.enableForegroundDispatch(this);
}
}
@Override
public void onPause() {
super.onPause();
if(nfcSession != null) {
nfcSession.disableForegroundDispatch();
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(nfcSession != null) {
nfcSession.processIntent(intent);
}
}
}