Iniciar nueva actividad después de escribir en la etiqueta NFC

Estoy tratando de iniciar una nueva activity después de una operación de escritura a una etiqueta NFC se ha completado. Intenté utilizar un controlador pero no funciona, la etiqueta se escribe correctamente, pero el controlador no inicia la activity que debe iniciar después de la operación de escritura

 private void formatTag(Tag tag, NdefMessage ndefMessage) { NdefFormatable ndefFormatable = NdefFormatable.get(tag); if (ndefFormatable == null) { Toast.makeText(this, "Tag is not NDEF formatable", Toast.LENGTH_LONG).show(); return; } try { ndefFormatable.connect(); ndefFormatable.format(ndefMessage); ndefFormatable.close(); Toast.makeText(this, "Tag has be written successfully!", Toast.LENGTH_LONG).show(); writeHandler.sendEmptyMessage(0); } catch (Exception e) { Log.e("formatTag: ", e.getMessage()); } } private Handler writeHandler = new Handler() { public void handleMessage(Message msg) { Intent nextActivity = new Intent(WriteCardActivity.this, MainActivity.class); startActivityForResult(nextActivity, 0); WriteCardActivity.this.finish(); } }; 

aquí está el manifiesto

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.loyalty.cardplanet.membershipcard" > <uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-feature android:name="android.hardware.nfc" android:required="false" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".RegisterActivity" android:label="@string/title_activity_register" > </activity> <activity android:name=".RedeemActivity" android:label="@string/title_activity_redeem" > </activity> <activity android:name=".PurchaseActivity" android:label="@string/title_activity_purchase" > </activity> <activity android:name=".ResetPinActivity" android:label="@string/title_activity_reset_pin" > </activity> <activity android:name=".WriteCardActivity" android:label="@string/title_activity_write_card" > </activity> </application> </manifest> 

Usted tiene un IntentFilter en su MainActivity por lo que Intent debe coincidir con el IntentFilter de la actividad.

Así que usted debe comenzar su actividad de esta manera:

 Intent nextActivity = new Intent(WriteCardActivity.this, MainActivity.class); nextActivity.setAction(Intent.ACTION_MAIN); nextActivity.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(nextActivity); WriteCardActivity.this.finish(); 

Me lo imaginé. Decidí usar un AlertDialog vez de un Handler así que quité la parte del Handler y onNewIntent esto a onNewIntent

 @Override protected void onNewIntent(Intent intent) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); NdefMessage ndefMessage = createNdefMessage(account+""); writeNdefMessage(tag, ndefMessage); AlertDialog.Builder alertDialog = new AlertDialog.Builder(WriteCardActivity.this); alertDialog.setMessage("Card Written Successfully!"); alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent intent = new Intent(WriteCardActivity.this, MainActivity.class); Bundle b = new Bundle(); b.putBoolean("new_window", true); //sets new window intent.putExtras(b); startActivity(intent); } }); alertDialog.create(); alertDialog.show(); super.onNewIntent(intent); } 

Este código funciona para mí. Y no llame a WriteCardActivity del onCreate de MainActivity, onResume o onPause. De lo contrario WriteCardActivity comenzará de nuevo.

 private void formatTag(Tag tag, NdefMessage ndefMessage) { NdefFormatable ndefFormatable = NdefFormatable.get(tag); if (ndefFormatable == null) { Toast.makeText(this, "Tag is not NDEF formatable", Toast.LENGTH_LONG).show(); return; } try { ndefFormatable.connect(); ndefFormatable.format(ndefMessage); ndefFormatable.close(); Toast.makeText(this, "Tag has be written successfully!", Toast.LENGTH_LONG).show(); Intent nextActivity = new Intent(WriteCardActivity.this, MainActivity.class); startActivityForResult(nextActivity, 0); WriteCardActivity.this.finish(); } catch (Exception e) { Log.e("formatTag: ", e.getMessage()); } } 
  • Cómo interpretar el contenido de NDEF en Mifare Classic 1K
  • ¿Es posible cambiar el intervalo de exploración de etiquetas Android NFC?
  • Cómo enviar una cadena simple de android a android sobre nfc?
  • Preguntas y respuestas sobre el desarrollo móvil Android y Symbian NFC (FAQ)
  • Leer varias etiquetas NFC simultáneamente en Android
  • Leer datos de la etiqueta NFC (IsoDep)
  • ¿Cómo encuesta de Android para dispositivos NFC
  • No se pueden enviar datos desde o hacia un Galaxy Nexus a través de LLCP
  • Bidireccional bidireccional de Android
  • ¿Cómo instalar Open NFC Simulator para Android?
  • ¿Cómo podría comprobar si un dispositivo Android es compatible con SNEP o Android Ndef Push Protocol?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.