2011-01-31 83 views
7

我试图在广播接收器中捕获NFC标签,因此我写了一个简单的BR,在onReceive()中打印“asd”。在清单XML它desribed这样的:与广播接收器一起收到的Android NFC标签

,我收到仅此打印在所有....

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协同工作?

+0

对不起评论dint接受了manifest.xml代码我不知道为什么没有什么奇怪的,我只是使用:action android:name =“android.nfc.action.TAG_DISCOVERED”and category android:name = “android.intent.category.DEFAULT”所以我认为NFC意图只是不想启动接收器,它只适用于活动,为什么? – 2011-01-31 16:54:29

+0

现在应该没问题:) – xil3 2011-01-31 16:56:06

回答

9

你不能。正如您所指出的那样,NFC适配器正在使用非常类似startActivity()的内容来发送带有标签信息的意图。它不是,正如一样,因为我们可以在Android SDK中执行此操作,因为NFC标签是特殊的。例如,除了TAG_DISCOVERED之外,您无法自行模拟startActivity(),而TAG_DISCOVERED是最后一招,而且不是非常有用。

我认为这是由于NFC意图的特殊处理。当NFC硬件发现标签时,它会寻找能处理标签的东西。前台活动首先尝试。如果可能,它会尝试下一个NDEF_DISCOVERED意图,然后查找要采取该操作的活动。如果找不到,则尝试使用TECH_DISCOVERED。同样,如果找不到活动,它最终会尝试TAG_DISCOVERED。如果它使用广播,它如何做这个回退逻辑来继续尝试找到处理标签的东西?它如何知道是否有任何行为符合标签意图?它怎么能确保只有一件事情会对标签起作用?

8

您可以编写一个根本不显示任何UI的小活动,发送广播消息,然后以finish()结束。在清单中使用标志可以避免它出现在历史或最新消息中,并且无法看到,希望可以获得类似于braodcast接收器所需的效果。