¿Cómo puedo asegurarme de que Android Beam no inicie una nueva instancia de mi actividad "singleTop"?

En primer lugar, el caso de uso: 2 teléfonos tienen mi aplicación abierta en la misma pantalla. Quiero que un usuario pueda compartir el contenido de la pantalla (datos) con el otro sin necesariamente abrir una nueva instancia de la actividad al transmitir con NFC. (Ambos dispositivos Android están ejecutando Ice Cream Sandwich)

Así que tengo una actividad singleTop declarada como esta en el manifiesto.

<activity android:name=".activity.MyActivity" android:configChanges="orientation|keyboardHidden" android:launchMode="singleTop"> <intent-filter android:label="@string/activityLabel"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="abc/xyz" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="application/xyz"/> </intent-filter> </activity> 

Cuando se dispara una acción VIEW y la actividad ya está en la parte superior, el método onNewIntent() se llama en la misma instancia si la actividad.

Cuando se NDEF_DISCOVERED una acción NDEF_DISCOVERED y la actividad ya está en la parte superior, el método onCreate() se llama en una nueva instancia de la actividad.

Describe el caso de que la aplicación ya está abierta y la Actividad adecuada está en primer plano. En ese caso, puede utilizar el primer plano de despacho de NFC intenciones llamando a NfcAdapter.enableForegroundDispatch() en NfcAdapter.enableForegroundDispatch() de su actividad onResume() (y disableForegroudDispatch() en onPause() ). Esto obligará a todos los NFC Intents a ser entregados a su actividad (vía onNewIntent() ).

No tengo respuesta para ti. Pero tengo una solución: hacer que el NDEF_DISCOVERED inicie una nueva actividad. Haga que la actividad sea invisible ( Theme.NoBackground ) y en onCreate, haga que comience MyActivity con singleTop y termine inmediatamente. MyActivity debería aparecer ahora con onNewIntent .

¿Has mirado la muestra de Android Beam:

http://developer.android.com/resources/samples/AndroidBeamDemo/index.html

Implementa este comportamiento que desea (menos VIEW intento de filtrado). No estoy seguro de si esa intención afectará la NDEF_DISCOVERED, pero sería interesante modificar quizá la muestra de Android Beam para ver si puede causar el mismo comportamiento que su aplicación.

Usted debe usar: android: launchMode = "singleInstance" Funciona para mí.

  • Android NFC lee los datos de ePassport
  • Hacer que la emulación de la tarjeta de host funcione para el pago
  • Posibilidad de lanzamiento de falsos NFC (Near Field Communication)
  • ¿Cuál es la tasa de bits de lectura NFC efectiva usando comandos de APDU?
  • Android NFC IsoDep leer el contenido del archivo
  • Lectura de varias etiquetas NFC en Android. IsoDep-tag no leerá mientras la pantalla está desbloqueada
  • Lectura de datos de la etiqueta NFC
  • ¿Puedo leer una tarjeta HID iClass con un dispositivo Android?
  • ¿Cómo pasar la intención de Android a nadie más que a mi propia aplicación?
  • Determinación de los requisitos de alimentación para una tarjeta inteligente sin contacto en Java.
  • ¿Iniciar una aplicación / intención de Android desde una etiqueta NFC?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.