强制NFC调度事件//禁用并重新启用NFC系统功能



背景

我正在开发一个嵌入式系统和安卓应用程序之间的NFC通信接口。嵌入式系统可以对写入NFC标签的NDEF消息的命令作出反应。在命令处理过程中,射频场处于非激活状态。通常,在命令处理结束时,会触发android.nfc.action.NDEF_DISCOVERED事件,我可以在应用程序中处理响应。

不幸的是,情况并非总是如此,有时安卓设备不会发出此类事件。如果我从NFC标签中物理移除安卓设备并将其再次放置在标签上,则会触发NDEF_DISCOVERED事件。我想实现一个触发NDEF_DISCOVERED事件的轮询机制。

我尝试了什么

我开始禁用并重新启用NFC适配器的ReaderMode,但没有成功:

public void reconnectNfc() {
NfcAdapter nfcAdapter = getNfcAdapter();
nfcAdapter.disableReaderMode(this);
getNfcAdapter().enableReaderMode(...);     
}

调度事件不是通过禁用读取器模式来触发的。

这个问题的公认答案是:安卓无需使用调度系统即可获得NFC标签建议我可以获得一个更新的Tag对象以这种方式进行调度,但不幸的是,它对我不起作用

有没有办法关闭和再次打开NFC系统的功能?

交互系统

在我的AndroidManifest.xml中,我指定了一个活动,当Android系统收到NFC调度意图时启动:

<activity
android:name="myNfcDispatchActivity"
...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>

myNfcDispatchActivity中的调度是这样执行的:

@Override
protected void onResume() {
super.onResume();
getNfcAdapter().enableReaderMode(this, 
tag -> {
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(() -> dispatchTag(tag));
},
NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS | NfcAdapter.FLAG_READER_NFC_A,
null);
}

并且我在CCD_ 7方法中处理CCD_

这个问题的公认答案:如何重新连接IsoDep标签?表明没有办法用程序解决我的问题

在这种情况下,您所能做的就是物理地移除标记,并将其再次呈现给读取器。

最新更新