Method onNewIntent(intent) not executing in NFC
android, nfc
Solution
Your code works fine when your activity is on foreground, but it won't work when the Activity is started by an Intent with `android.nfc.action.XXX_DISCOVERED` action. As it is the first intent, `onNewIntent()` won't be called, but you can use the intent in your `onCreate()` method. You should call your NFC logic from `onCreate()` and from `onNewIntent()`, validating the action before accessing the tag.
public class NFCActivity extends Activity {
private NfcAdapter mNFCAdapter;
private PendingIntent mNfcPendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
performTagOperations(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
performTagOperations(intent);
}
private void performTagOperations(Intent intent){
String action = intent.getAction();
if(action.equals(NfcAdapter.ACTION_TAG_DISCOVERED) ||
action.equals(NfcAdapter.ACTION_TECH_DISCOVERED) ){
//PERFORM TAG OPERATIONS
}
}
...
}
Problem
I am implementing the NFC in android project. I have written the entries which are required in the AndroidManifest.xml and Java code. When any tag come near by device then my app detect the tag then it open the activity but here I am getting NFC Tag Info but `onNewIntent` is not executing. Please guys share your views. ``` public class NFCActivity extends Activity { private NfcAdapter mNFCAdapter; private PendingIntent mNfcPendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nfc); // Create the OpenSqliteHelper object. It always best to create only // once instance of this OpenSqliteHelper DatabaseManager.init(this); mNFCAdapter = NfcAdapter.getDefaultAdapter(this); if (mNFCAdapter == null) { // Device does not support NFC Toast.makeText(this, getString(R.string.device_does_not_support_nfc), Toast.LENGTH_LONG).show(); } else { if (!mNFCAdapter.isEnabled()) { // NFC is disabled Toast.makeText(this, getString(R.string.enable_nfc), Toast.LENGTH_LONG).show(); } else { mNfcPendingIntent = PendingIntent.getActivity(NFCActivity.this, 0, new Intent(NFCActivity.this, NFCActivity.class) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); } } finish(); } @Override protected void onNewIntent(Intent intent) { Tag mTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); } @Override protected void onPause() { super.onPause(); mNFCAdapter.disableForegroundDispatch(this); } @Override public void onResume() { super.onResume(); mNFCAdapter.enableForegroundDispatch(this, mNfcPendingIntent, null, null); } } ``` AndroidManifest.xml ``` <activity android:name="net.livepatrols.thepartnerSA.NFCActivity" android:theme="@android:style/Theme.NoDisplay" > <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> ```