我刚开始使用 NFC 标签进行 Android 应用程序开发。该应用程序包含一个活动,即MainActivity。
MainActivity从 NFC 标签中读取数据。我想让它通过在onResume中使用getIntent()从最新检测到的标签中读取来获取最新的意图。我确实覆盖了 onNewIntent(Intent intent)并在其中调用setIntent(intent),并为MainActivity设置了“singleTop” launchMode 。
但是,当检测到标签时,系统将调用onResume(),并且永远不会调用onNewIntent()。onResume中的getIntent()将始终返回动作 MAIN的意图,这是第一次启动MainActivity时使用的原始意图。
有没有办法在onResume()中获取包含动作NDEF_DISCOVERED的意图?为什么不调用onNewIntent?
我有以下代码:(scala,只是把它读成java)
MainActivity 的 onNewIntent
override def onNewIntent (intent: Intent):Unit = {
super.onNewIntent(intent)
setIntent(intent)
}
onResume()
override def onResume () :Unit = {
super.onResume()
var action:String = getIntent().getAction() // always get action MAIN
... }
清单.xml
<activity
android:name="com.test.tagwriter.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- NFC intent filters -->
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data android:mimeType="application/com.distributed.dmv" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>