11

ブロードキャスト レシーバーで NFC タグをキャッチしようとしているので、onReceive() で "asd" を出力する単純な BR を作成しました。マニフェスト 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()のようなものを使用して、タグ情報を含むインテントを送信しています。NFCタグは特別なものであるため、AndroidSDK内で実行できることとはまったく異なります。たとえば、最後の手段であり、あまり役に立たないTAG_DISCOVERED以外の目的で、startActivity()を自分でエミュレートすることはできません。

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

于 2011-03-16T03:22:49.813 に答える
11

UI をまったく表示せず、ブロードキャスト メッセージを送信し、finish() で終了する小さなアクティビティを作成できます。マニフェストでフラグを使用すると、履歴や最近に表示されて不可視になることを回避できます。うまくいけば、ブロードキャスト レシーバーで望むのと同様の効果が得られます。

于 2011-04-25T18:18:45.737 に答える