0

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>
4

0 に答える 0