我一直在开发一个应用程序,它使用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 |
+---------------------------------------------------+
问题是如何在您的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