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

问题描述 投票:0回答:1

背景

我正在研究嵌入式系统和Android应用之间的NFC通信接口。嵌入式系统可以对写入NFC标签的NDEF消息的命令做出反应。在处理命令期间,RF字段处于非活动状态。通常,在命令处理终止时,会触发android.nfc.action.NDEF_DISCOVERED事件,我可以在我的应用中处理响应。

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

我尝试了什么

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

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

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

对此问题的公认答案:android get NFC tag without using dispatch system建议我可以获取更新的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);
}

并且我以tag方法处理dispatchTag()对象的NDEF消息

android nfc
1个回答
0
投票

在这种情况下,您所能做的就是物理地删除标签,然后将其再次显示给阅读器。

© www.soinside.com 2019 - 2024. All rights reserved.