当前位置: 首页 > 知识库问答 >
问题:

NFC标签在onNewIntent()上为空

濮嘉茂
2023-03-14

我一直在开发一个应用程序,它使用NFC标签做一些魔术。

一切都很好,直到最近,我改变了一些代码,这些代码与之前一直有效的NFC代码无关。

当我通过NFC点击启动我的应用程序时,所有的工作,当我点击应用程序运行时,我将在onNewIntent()中收到未来的NFCTag。

当我通过图标启动应用程序并在应用程序运行时尝试点击时,会调用onNewIntent()方法,但当我试图从intent中获取额外的NFCTag时,它会返回null。

我是否正确地认为,即使它为null,但自从调用onNewIntent()以来,我已经正确地设置了ForegroundDispatch?

这是密码。。。

protected void onResume() {
    if(this.mNfcAdapter==null) {
        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    }
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    IntentFilter nfcFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    try {
        nfcFilter.addDataType("application/application.myorg.myapp");
    } catch (MalformedMimeTypeException e) {
        Log.e(TAG, "Error Setting FD for NFC", e);
    }
    String[][] mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
    mNfcAdapter.enableForegroundDispatch(this, pendingIntent, new IntentFilter[] {nfcFilter}, mTechLists);
}

protected void onPause() {
    super.onPause();
    mNfcAdapter.disableForegroundDispatch(this);
    Log.d(TAG, "Activity is pausing");
}

protected void onNewIntent(Intent intent) {
    Log.d(TAG, "NFC TAP WHILE ACTIVE");
    Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
    if(tag!=null) {
       //NEVER CALLED WHEN LAUNCHED VIA ICON (NOT NFC)
       Log.d(TAG, "TAG IS NOT NULL");
    }
}

我在IntentFilter中设置的MIME类型与我在清单中设置的相同。

编辑

我的清单

<activity
   android:name="org.mypackage.myapp.MainActivity"
   android:label="@string/app_name" >
     <intent-filter>
          <action android:name="android.intent.action.MAIN" />

          <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
     <intent-filter>
          <action android:name="android.nfc.action.NDEF_DISCOVERED" />                                       
          <data android:mimeType="application/org.mypackage.myapp" />
          <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</activity>

我的标签是什么样子的

+---------------------------------------------------+
| MIME:application/org.mypackage.myapp | StringData |
+---------------------------------------------------+
| EXT:android:com:pkg | org.mypackage.myapp         |
+---------------------------------------------------+

共有1个答案

司马振国
2023-03-14

问题是如何在您的onNewIntent()方法中检索意图。目前您正在使用getIntent()来获取您试图从中检索EXTRA_TAG的意图。除非您使用setIntent(...)来更改它(您在代码的相关部分显然不做的事情),否则这将返回最初启动您活动的意图。NFC发现意图被传递到参数Intent意图中的onNewIntent()方法。所以使用这个应该可以做到:

protected void onNewIntent(Intent intent) {
    Log.d(TAG, "NFC TAP WHILE ACTIVE");
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    if (tag != null) {
       Log.d(TAG, "TAG IS NOT NULL");
    }
}

此外,您可能需要检查您收到的意图是否实际具有您预期的意图操作(例如,操作_NDEF_DISCOVERED)。

还有一件事:当您注册NDEF_DISCOVERED意向时,您可以安全地将mTechLists设置为null。技术列表仅用于tech_发现的intent过滤器。

 类似资料:
  • 我有一个捕捉NFC标签的应用程序。我过去遇到的问题是,用户以不稳定的方式悬停在标签上,导致NFC适配器触发两次。 我已经做了一些事情来应对这个问题。 显示: 这将NFC捕获活动设置为堆栈中的唯一实例,并且没有历史记录。我已经覆盖了所有可以停止并重新启动此活动的配置更改,后者可能会导致意向数据重新交付到该活动,使其看起来像是重复扫描。 在活动本身,我已经重写了onNewIntent,除了显示一个糟糕

  • 问题内容: 使用最新的NFC标签,最多可以存储8k数据。因此,我想知道如何将图片存储在标签上,例如NXP TagWriter应用程序。 我没有找到任何信息。谁能解释该怎么做? 问题答案: 您可以使用MIME类型记录将图像存储在NFC标签上。例如,如果您的图像是JPEG图像,则应使用MIME类型“ image / jpeg”。您的NDEF记录可能如下所示: 在Android上,您可以使用 或使用的构

  • 我有ntag213,使用react-native-nfc-Manager和andriod一起使用,在我的标签留档https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf我知道首先我需要验证命令0x1B0x2B和我的密码:0xFF1FFFFF

  • 本文向大家介绍详解Android平台上读写NFC标签,包括了详解Android平台上读写NFC标签的使用技巧和注意事项,需要的朋友参考一下 本文主要谈一谈Android上有关NFC标签的读写问题(NDEF格式)。 硬件环境:android4.0(Sony M35h)+可读可写的NFC标签若干 一、NFC基础知识 1.NFC是什么? NFC,即Near Field Communication,近距离

  • 我正在中写入我的。当我编写Ndf记录时,它工作得很好,但当我尝试使标签只读时,我得到了。这是发生异常的代码: 该makeReadOnly适用于Mifare Ultralight (MF0ICU1)标签。

  • 我正在开发一个用于从MIFARE标签读取和写入数据的应用程序。我买了一个可以使用NFC技术读取和写入MIFARE标签操作的设备。 NFC屏蔽 我一直在使用MIFARE ultralight标签,但在尝试验证特定内存地址时遇到了问题。由于这个原因,我不能开始阅读。这是我的Arduino代码: 此读取代码是为Arduino Mega 2560和Seeedstudio NFC Shield v1.0和M