Как извлечь данные с помощью технологии IsoDep — NFC (Android)

Я использую технологию NFC для одного из своих проектов на Android. Я успешно реализовал обнаружение тегов и на основе тега знаю, какой класс мне нужно использовать для извлечения данных. Но есть одна проблема: карта, которую мне нужно использовать/нажать для получения данных, использует технологию IsoDep, а не NDEF. Я знаю, как извлечь данные с карты, работающей по технологии NDEF, но я застрял здесь из-за технологии IsoDep. Я делюсь своим фрагментом кода с этим вопросом для лучшего понимания.

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {

Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
IsoDep isoDep = IsoDep.get(tag);
isoDep.connect();
//code to get the data from card
isoDep.close()
}

Итак, здесь я получаю TAG_DISCOVERED через NFCAdapter, а внутри условия я получаю IsoDep, tech.NFcA, NdefFormattable в качестве значения переменной тега. Я создаю экземпляр класса IsoDep и вызываю метод connect(). Здесь я получаю IOException каждый раз, когда пытаюсь запустить соединение для чтения данных, я не знаю, почему !!! Может ли кто-нибудь помочь мне решить эту проблему? Любая помощь будет ценной.

Спасибо


person Salman Khan    schedule 25.05.2017    source источник


Ответы (1)


Прежде всего, вы должны проверить, сработал ли вызов .get, проверив, работает ли isoDep == null.

Что касается вашего IOException, трудно определить конкретную причину проблемы, если вы не можете предоставить код. Методы извлечения данных из тегов варьируются от производителя к производителю. Вы заметили, что тег также поддерживает NfcA, возможно, стоит проверить, не работает ли и эта технология.

Тем не менее, некоторые вещи, которые следует учитывать:

  • Вы пробовали использовать более 1 тега? Можете ли вы подтвердить, что проблема не связана с тегом?
  • У вас правильно настроены разрешения NFC? Из-за этого может возникнуть нелогичное исключение IOException.
  • Вы звоните .close() из другой темы? Это вызовет исключение IOException.
person henrycjc    schedule 31.05.2017
comment
Спасибо за ответ @henrycjc. Я уже проверил, что объект IsoDep не является нулевым в моем случае. Также для всех других технологий я получаю нулевое значение, поэтому я думаю, что мне нужно использовать технологию IsoDep только в этом случае. - person Salman Khan; 31.05.2017
comment
Просто чтобы уточнить, нулевая проверка - это просто хорошая практика, а не решение проблемы. Но вы говорите, что NfcA появляется в Tag.getTechList(), но вы не можете успешно .get? Вы уверены, что еще не подключились к другой технологии? Также вы можете ответить на вопрос IOException? Все еще немного неясно, что вы пытаетесь сделать. - person henrycjc; 31.05.2017
comment
Итак, я проверил это еще раз, я успешно получаю Nfca.get(tag). И что касается IOException при использовании технологии IsoDep для выполнения любой операции, нам нужно сначала подключить(), но при этом я получаю исключение IO. Надеюсь, ты успел на этот раз. - person Salman Khan; 31.05.2017
comment
Даже для объекта Nfca, когда я пытаюсь выполнить connect(); это дает мне IOException. - person Salman Khan; 31.05.2017