11

我试图在广播接收器中捕获 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 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 一起使用?

4

2 回答 2

13

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

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

于 2011-03-16T03:22:49.813 回答
11

You could write a small activity that doesn't show any UI at all, sends a broadcast message and then ends with finish(). Using flags in the manifest you can avoid it showing up in history or in recents and being faily invisible, hopefully getting a similar effect to that you desire with the braodcast receiver.

于 2011-04-25T18:18:45.737 回答