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()); } } 
  • Edición de la funcionalidad de la emulación de la tarjeta de host en Android
  • Bidireccional bidireccional de Android
  • Adaptador NFC Firemonkey android
  • Leer varias etiquetas NFC simultáneamente en Android
  • Múltiples escaneos / intenciones entregadas a la actividad de recepción
  • Lectura de varias etiquetas NFC en Android. IsoDep-tag no leerá mientras la pantalla está desbloqueada
  • Iniciar una actividad específica al escanear etiquetas NFC
  • Accede a la etiqueta NFC desde una aplicación de reloj en Android
  • Acaba de leer una etiqueta NFC
  • Cómo enviar una cadena utilizando NFC desde un teléfono Windows 8 a un dispositivo Android
  • Activar un propietario de dispositivo con NFC en Android Lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.