2011-01-31 12 views
7

ブロードキャストレシーバでNFCタグをキャッチしようとしていますので、onReceive()で "asd"という文字を表示する簡単なBRを作成しました。 XMLマニフェストでは、そのようdesribedです:....AndroidのNFCタグがbroadcastreceiverで受信されました

と私はすべてこれだけなしプリントを受け取る

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コードを受け入れました。私はなぜそれが奇妙なのか分かりません、私はちょうど使用します:アクションアンドロイド:name = "android.nfc.action.TAG_DISCOVERED" and category android:name = "android.intent.category.DEFAULT"だから、NFCインテントは受信機を起動したくないと思うので、それはアクティビティでのみ動作します。なぜですか? –

+0

今は大丈夫でしょう:) – xil3

+0

放送受信機のコードを投稿できますか? – xil3

答えて

9

できません。あなたが指摘したように、NFCアダプタは、startActivity()と非常によく似た何かを使用して、その中にタグ情報を持つインテントを送り出します。 NFCタグは特別なので、正確にはではなく、Android SDK内でできることと同じです。例えば、TAG_DISCOVERED以外の何かのためにあなた自身でstartActivity()をエミュレートすることはできません。これは最後の手段であり、非常に有用ではありません。

この理由は、NFCインテントの特別な処理によるものだと思います。タグがNFCハードウェアによって検出されると、タグを処理するものを探します。フォアグラウンドのアクティビティが最初に試行されます。可能であれば、次にNDEF_DISCOVEREDインテントを試行し、それを取るアクティビティを探します。見つからない場合は、TECH_DISCOVEREDでインテントを試みます。また、アクティビティが見つからない場合は、最終的にTAG_DISCOVEREDを試行します。ブロードキャストを使用していた場合、タグを処理するための何かを見つけようとするために、このフォールバックロジックをどうすればできますか?タグの意図に何かが作用しているかどうかはどのように分かりますか?そして、タグに作用するのは確実に1つだけであることを確実にすることができますか?

8

UIをまったく表示しない小さなアクティビティを作成し、ブロードキャストメッセージを送信してからfinish()で終了できます。マニフェストでフラグを使用すると、履歴や復唱に現れたり、見えなくなったりするのを避けることができます。期待していたのは、キャッチコピーの受信者が望むのと同様の効果です。

+0

マニフェストにも両方を追加する必要があります。避ける) – TacB0sS

関連する問題