Android NFC-tag empfangen, mit broadcastreceiver
Ich versuche zu fangen, NFC-tag im broadcast-receiver, also schrieb ich ein einfaches BR druckt "asd" in der onReceive(). In der xml-Manifestdatei ist es desribed so:
und ich bekomme nur dieses und kein Druck auf allen....
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)
Wenn ich mit Aktivität zu behandeln die Absicht wie diese:
<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>
Die Aktivität gestartet wird und einwandfrei, also wie kann ich es machen das arbeiten mit BroadcastReceiver?
- Tut mir Leid, der Kommentar dint akzeptiert manifest.xml code ich weiß nicht, warum es nichts seltsam, ich benutze nur: action android:name="android.nfc.Aktion.TAG_DISCOVERED" und in der Kategorie android:name="android.Absicht.Kategorie.DEFAULT" Also ich denke, dass die NFC-Vorsatz einfach nicht wollen, zu starten, der receiver und es funktioniert nur mit Aktivitäten, warum?
- Sollte in Ordnung sein jetzt 🙂
- Können Sie Ihre broadcast receiver code?
- <receiver android:name=".nfc.NFCReceiver" android:enabled="true"> <intent-filter android:priority="1"> <action android:name="verspotten.NFC"/> </intent-filter> </receiver>
- dies ist der Empfänger der Erklärung aber es erscheint nicht in der main-post, ich weiß nicht, warum?
- Das problem ist, dass der android NFCService Anrufe startActivity() für das tag Absicht, das ist, warum ein BR-cant fangen....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht. Wie Sie darauf hingewiesen, dass der NFC-adapter ist mit etwas sehr viel wie startActivity() zu senden, eine Absicht, mit tag-Informationen in es. Es ist nicht genau wie das, was wir tun können, im Android-SDK, da NFC-tags sind spezielle. Zum Beispiel können Sie nicht emulieren, die startActivity() auf Ihre eigene für alles, außer TAG_DISCOVERED, die die Aktion für die Letzte Möglichkeit und nicht sonderlich hilfreich.
Ich glaube, der Grund für dieses ist aufgrund der besonderen Handhabung von NFC-intents. Wenn ein tag entdeckt wird von der NFC-hardware, es geht auf der Suche nach etwas, das Sie verarbeiten den tag. Vordergrund Aktivitäten erhalten Sie zuerst versuchen. Es wird versucht eine NDEF_DISCOVERED Absicht weiter, wenn er kann, und sucht nach einer Tätigkeit, es zu nehmen. Wenn Sie nicht finden können, es versucht, eine Absicht, mit TECH_DISCOVERED. Wieder, wenn keine Aktivität gefunden werden kann, ist es schließlich versucht TAG_DISCOVERED. Wenn es früher eine Sendung, wie könnte es auch tun, in diesem fall-back-Logik zu halten, versuchen, etwas zu finden, zu behandeln den-tag? Wie würde es wissen, wenn etwas handeln an den tag Absicht? Und wie könnte es sicherzustellen, dass nur eine Sache war zu handeln, auf der tag?
Könnten Sie schreiben, eine kleine Aktivität, die nicht zeigt keine Benutzeroberfläche an alle, sendet eine broadcast-Nachricht und endet dann mit finish(). Mit Fahnen in der manifest Sie es vermeiden können, zeigt sich in der Geschichte oder in recents und faily unsichtbar, hoffentlich immer eine ähnliche Wirkung zu, dass Sie den Wunsch mit den braodcast-Empfänger.