2011-01-31 29 views
7

Sto provando a catturare il tag NFC nel ricevitore di trasmissione, quindi ho scritto un semplice BR che stampa "asd" nel onReceive(). Nel XML manifest è desribed così:Tag NFC Android ricevuto con broadcastreceiver

e ricevo solo questo e non stampa a tutti ....

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) 

Quando uso l'attività di gestire l'intento in questo modo:

<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> 

L'attività è iniziata e funziona perfettamente, quindi come posso farlo funzionare con BroadcastReceiver?

+0

Mi dispiace il commento dint ha accettato il codice manifest.xml Non so perché non è niente di strano lì, io uso solo: action android: name = "android.nfc.action.TAG_DISCOVERED" e categoria android: name = "android.intent.category.DEFAULT" Quindi penso che l'intenzione dell'NFC non voglia semplicemente avviare il ricevitore e funziona solo con le attività, perché? –

+0

Ora va bene :) – xil3

+0

Puoi pubblicare il tuo codice di ricezione broadcast? – xil3

risposta

9

Non è possibile. Come hai sottolineato, l'adattatore NFC utilizza qualcosa di molto simile a startActivity() per inviare un intent con le informazioni del tag al suo interno. Non è esattamente come quello che possiamo fare all'interno dell'SDK Android, poiché i tag NFC sono speciali. Ad esempio, non puoi emulare lo startActivity() da solo per qualcosa tranne TAG_DISCOVERED, che è l'azione di ultima istanza e non molto utile.

Penso che il motivo sia dovuto alla gestione speciale degli intenti NFC. Quando un tag viene rilevato dall'hardware NFC, va alla ricerca di qualcosa che gestirà il tag. Le attività in primo piano vengono provate per prime. Prova, se possibile, un intento NDEF_DISCOVERED, e cerca un'attività da intraprendere. Se non riesce a trovarne uno, prova un tentativo con TECH_DISCOVERED. Di nuovo, se non è possibile trovare attività, alla fine prova TAG_DISCOVERED. Se usasse una trasmissione, come avrebbe potuto fare questa logica fall-back per continuare a cercare di trovare qualcosa per gestire il tag? Come saprebbe se qualcosa stava agendo sull'intento del tag? E come potrebbe garantire che solo una cosa avrebbe agito sul tag?

8

È possibile scrivere una piccola attività che non mostra alcuna interfaccia utente, invia un messaggio broadcast e termina con finish(). Usando i flag nel manifest puoi evitare di visualizzarlo nella cronologia o in caso di rientri e di essere invisibile al faily, con la speranza di ottenere un effetto simile a quello che desideri con il ricevitore di braodcast.

+0

Ancora bisogno di aggiungere entrambi al manifest però ... (Questo è quello che sto cercando di evitare) – TacB0sS

Problemi correlati