与广播接收者一起收到的Android NFC标签

时间:2011-01-31 16:52:30

标签: android broadcastreceiver nfc

我正试图在广播接收器中捕获NFC标签,所以我写了一个简单的BR,在onReceive()中打印“asd”。在清单xml中,它被描述为:

                              

我只收到这个而且根本没有印刷品....

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)

当我使用activity来处理这样的意图时:

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

活动已启动且运行正常,因此如何使其与BroadcastReceiver一起使用?

2 个答案:

答案 0 :(得分:9)

你做不到。正如您所指出的,NFC适配器正在使用与startActivity()非常相似的东西来发送带有标记信息的意图。它不像我们在Android SDK中那样完全,因为NFC标签很特别。例如,除了TAG_DISCOVERED之外,你不能自己模拟startActivity(),这是最后的手段,并不是非常有用。

我认为这是因为NFC意图的特殊处理。当NFC硬件发现标签时,它会寻找能够处理标签的东西。前景活动首先尝试。如果可以,它会尝试下一个NDEF_DISCOVERED意图,并寻找一个活动来接受它。如果找不到,则尝试使用TECH_DISCOVERED。同样,如果找不到任何活动,它最终会尝试TAG_DISCOVERED。如果它使用广播,它怎么能做这个后备逻辑继续尝试找到处理标签的东西?如何知道是否有任何行为对标签意图?它怎么能确保只有一件事会对标签起作用?

答案 1 :(得分:8)

您可以编写一个根本不显示任何UI的小活动,发送广播消息,然后以finish()结束。使用清单中的标记可以避免它出现在历史记录或最近的状态中并且很快隐形,希望能够获得与您想要的广播接收器类似的效果。