当我正常扫描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();
这是预期的行为吗?
答案 0 :(得分:0)
没有什么奇怪的行为。
如果“怪异地扫描”意味着您在仍可访问标签时(例如,在调用connect()
之前)扫描标签并将其拉出读取范围,则应获得记录的IOException
here。之所以会出现IO异常,是因为您尝试访问不再可用的外部设备(NFC标签)。因此,无法再进行通信,并且必须中断IO操作。
但是,当您只想从标记中读取NDEF消息时,在将标记发现事件分派到您的应用之前,Android已经为您解决了这一问题。 Android通过意向附加EXTRA_NDEF_MESSAGES将NDEF消息传递给您的应用。因此,(通常)无需再次手动读取NDEF消息(除非标签上的消息动态更改)。