Search code examples
androidnfcandroid-applicationrecord

Android NFC sensing and read tag data at the same time


I have a question about the android NFC.

I have already done the function about read and write, but still have one problem.

I wrote the AAR in my tag, after first sensing, it can launch my application.

Second time sensing (my application is launched), I can read the data from NFC tag.

Is it possible just sensing once that can launch my application and get the data from tag?


Solution

  • In AndroidManifest -

      <activity
            android:name=".TagDiscoverer"
            android:alwaysRetainTaskState="true"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:screenOrientation="nosensor" >
            <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" />
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
    
                <category android:name="android.intent.category.DEFAULT" />
    
                <data android:mimeType="text/plain" />
            </intent-filter>
    
            <meta-data
                android:name="android.nfc.action.TECH_DISCOVERED"/>
        </activity>
    

    you should initiate the NFC adopter in OnCreate()..

         /**
          * Initiates the NFC adapter
         */
      private void initNfcAdapter() {
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        mPendingIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
       }
    

    Now in OnResume() ...

      @Override
      protected void onResume() {
      super.onResume();
      if (nfcAdapter != null) {
        nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
      }
     }