因此,我对NFC标签进行了编程以启动我当前正在处理的应用程序。我使用以下服务来做到这一点:https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=en
[我想做的就是每当NFC标签打开我的应用程序时,从一项活动切换到另一项活动。
在我的AndroidManifest.xml中的清单标签下,我有:
<uses-permission android:name="android.permission.NFC" />
<uses-sdk android:minSdkVersion="10"/>
<uses-feature android:name="android.hardware.nfc" android:required="true" />
而且我的MainActivity看起来像这样:
<activity android:name=".MainActivity">
<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" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
由于NFC标签首先打开了MainActivity,所以我想看看它是否已被NFC打开。如果有,请切换到另一个活动。
问题是getIntent().getAction()
在我期望android.intent.action.MAIN
时总是返回android.nfc.action.NDEF_DISCOVERED
。
目前,我正在使用以下代码在onResume()
方法下执行此检查(基本上是调试):
@Override
protected void onResume() {
super.onResume();
System.out.println(getIntent().getAction());
}
而且我尝试在onCreate()
和onStart()
方法下执行此检查。他们都返回android.intent.action.MAIN
结果,而我希望是android.nfc.action.NDEF_DISCOVERED
。
我刚开始从事Android开发,我只是想将其用于一个小型原型。如果您能帮助我,将不胜感激!
编辑:我知道了!我对此问题进行了很多研究,我认为我的NFC标签需要一些文本/纯文本类型的额外数据(我之前也没有指定此mimeType,因此似乎是强制性的)。我还尝试调试应用程序时将NDEF_DISCOVERED置于LAUNCHER类别下,然后将其更改回DEFAULT。我终于得到了我想要的结果!
getIntent()
返回用于创建活动的Intent
。您的情况就是主屏幕启动器Intent
。
扫描NFC标签时,将向该活动发送新的Intent
。将Intent
传递给您可以覆盖的onNewIntent()
方法。
取决于您使用活动的方式,您可能需要同时处理两种情况:
Intent
创建的>Intent
创建的,并且在Intent
中得到了NDEF onNewIntent()