我刚开始使用NFC标签进行Android应用程序开发。 该应用程序包含一个活动,即 MainActivity 。
MainActivity 从NFC标签读取。我想让它从最新检测到的标签中读取 使用 onResume 中的 getIntent() 来获取最新意图。我确实覆盖 onNewIntent(Intent intent) 并在其中调用 setIntent(intent) ,然后设置 “singleTop” MainActivity 的launchMode。
但是,当检测到代码时,系统会调用 onResume() , onNewIntent() 永远不会被称为。 onResume 中的 getIntent() 将始终返回操作MAIN 的意图,这是首次启动 MainActivity 时使用的原始意图。
有没有办法在 onResume() 中获得包含 NDEF_DISCOVERED 操作的意图? 为什么 onNewIntent 被调用?
我有以下代码:(scala,只读它为java)
onNewIntent of MainActivity
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
... }
的Manifest.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>