Получение IOException при странном сканировании тега NFC - PullRequest
0 голосов
/ 27 ноября 2018

Когда я сканирую тэг NFC нормально, мой код работает нормально.Но когда я сканирую это странно, например, смахиванием или чем-то еще, я могу получить эту ошибку в консоли:

W/System.err( 8533): java.io.IOException
W/System.err( 8533):    at android.nfc.tech.BasicTagTechnology.connect(BasicTagTechnology.java:85)
W/System.err( 8533):    at android.nfc.tech.Ndef.connect(Ndef.java:71)
W/System.err( 8533):    at myapp.myapp.MainActivity.onNewIntent(MainActivity.java:171)
W/System.err( 8533):    at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1213)
W/System.err( 8533):    at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1225)
W/System.err( 8533):    at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2610)
W/System.err( 8533):    at android.app.ActivityThread.performNewIntents(ActivityThread.java:2622)
W/System.err( 8533):    at android.app.ActivityThread.handleNewIntent(ActivityThread.java:2631)
W/System.err( 8533):    at android.app.ActivityThread.access$1700(ActivityThread.java:169)
W/System.err( 8533):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1454)
W/System.err( 8533):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err( 8533):    at android.os.Looper.loop(Looper.java:148)
W/System.err( 8533):    at android.app.ActivityThread.main(ActivityThread.java:5554)
W/System.err( 8533):    at java.lang.reflect.Method.invoke(Native Method)
W/System.err( 8533):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746)
W/System.err( 8533):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)

Это мой код NFC:

ndef.connect();                                                           
NdefMessage ndefMessage = ndef.getNdefMessage();                          
if (ndefMessage != null) {                                                
    String message = new String(ndefMessage.getRecords()[0].getPayload());
    //Log.w(TAG, "readFromNFC:: "+message);                               
    if (mEvents != null){                                                 
        Log.d(TAG, "mEvents aren't null");                                
        mEvents.success(message);                                         
    }                                                                     
} else {                                                                  
    if (mEvents != null){                                                 
        mEvents.error("ERROR", "empty", null);                            
    }                                                                     
}                                                                         
ndef.close();   

Ожидается ли такое поведение?

1 Ответ

0 голосов
/ 29 ноября 2018

В этом поведении нет ничего странного.

Если "сканировать это странно" означает, что вы сканируете тег и вытаскиваете его из диапазона чтения, пока к нему еще обращаются (например, перед вызовом connect()),тогда вы должны получить IOException как задокументировано здесь .Вы получаете это исключение ввода-вывода, потому что вы пытаетесь получить доступ к внешнему устройству (тег NFC), которое больше не доступно.Следовательно, связь больше невозможна, и операция ввода-вывода должна быть прервана.

Однако, когда вы хотите только прочитать сообщение NDEF из тега, Android уже позаботится об этом перед отправкой события обнаружения тега.в ваше приложение.Android передает это NDEF-сообщение в ваше приложение через намерение EXTRA_NDEF_MESSAGES .Поэтому (как правило) нет необходимости снова вручную читать сообщение NDEF (если только сообщение в теге не изменяется динамически).

...