2011-01-31 19 views
7

Estoy tratando de atrapar la etiqueta NFC en el receptor de difusión, así que escribí un BR simple que imprime "asd" en el onReceive(). En el manifiesto XML se desribed así:Etiqueta Android NFC recibida con receptor de difusión

y que solo recibo esto y ninguna impresión en absoluto ....

01-31 16:37:18.980: ERROR/MediaPlayer(990): setAudioStream called in state 8 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.980: ERROR/MediaPlayer(990): start called in state 0 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.988: ERROR/MediaPlayer(990): Error (-38,0) 

Cuando uso la actividad de maneje la intención de esta manera:

<activity android:name="TagViewer" 
      android:theme="@android:style/Theme.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.nfc.action.TAG_DISCOVERED"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
</activity> 

La actividad se inició y funciona perfectamente, así que ¿cómo puedo hacer que funcione con BroadcastReceiver?

+0

Disculpa el comentario no acepté el código manifest.xml No sé por qué no es nada extraño, solo uso: action android: name = "android.nfc.action.TAG_DISCOVERED" and category: name = "android.intent.category.DEFAULT" Así que creo que la intención de NFC simplemente no quiere iniciar el receptor y funciona solo con actividades, ¿por qué? –

+0

Debería estar bien ahora :) – xil3

+0

¿Puedes publicar tu código de receptor de difusión? – xil3

Respuesta

9

No puede. Como señaló, el adaptador NFC usa algo muy parecido a startActivity() para enviar un intento con información de etiqueta. No es exactamente como lo que podemos hacer dentro del SDK de Android, ya que las etiquetas NFC son especiales. Por ejemplo, no puedes emular el startActivity() por tu cuenta para nada excepto TAG_DISCOVERED, que es la acción de último recurso y no es terriblemente útil.

Creo que la razón de esto se debe al manejo especial de los intentos de NFC. Cuando el hardware NFC descubre una etiqueta, busca algo que maneje la etiqueta. Las actividades en primer plano tienen el primer intento. Intenta un intento NDEF_DISCOVERED siguiente si puede, y busca una actividad para tomarlo. Si no puede encontrar uno, intenta un intento con TECH_DISCOVERED. De nuevo, si no se puede encontrar actividad, finalmente intenta TAG_DISCOVERED. Si usaba una transmisión, ¿cómo podría hacer esta lógica alternativa para seguir tratando de encontrar algo para manejar la etiqueta? ¿Cómo sabría si algo estaba actuando según el objetivo de la etiqueta? ¿Y cómo podría garantizar que solo una cosa iba a actuar en la etiqueta?

8

Puede escribir una actividad pequeña que no muestre ninguna UI en absoluto, envíe un mensaje de difusión y luego termine con finish(). Al usar banderas en el manifiesto, puedes evitar que aparezca en la historia o en los recientes y que sea ligeramente invisible, con la esperanza de obtener un efecto similar al que deseas con el receptor Braodcast.

+0

Aún así es necesario agregar ambos al manifiesto ... (Eso es lo que intento evitar) – TacB0sS

Cuestiones relacionadas