Android アプリケーションの開発に NFC タグを使い始めました。アプリケーションにはMainActivityというアクティビティが 1 つ含まれています。
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>