Android NFC:すべてのタグを傍受します
-
14-11-2019 - |
質問
電話で発見されたすべてのタグを傍受するようにアプリが欲しい。そのように私はタグのUIDをチェックし、その後インテントを渡したい(アプリケーション選択などを表示)。
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
.
それは私が現在マニフェストに持っているもの、tag_discoveredの意図フィルタとともに:
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.Ultralight</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
</tech-list>
.
MIFAREスマートカードをスキャンすると、私のアプリは呼び出されます.NXP iCode ICとは異なるタグを使用すると、標準のAndroidタグアプリが起動されます。
私がすべてのタグを見ることを確実にすることができる方法についてのヒント?
解決
最初のオフ、Tech-Listの作業方法は、すべての技術がまとめられていることです。つまり、タグに表示されているすべてのテクニカルが表示されている場合は、意図がアプリに渡されます。私はそれを知りません。あなたがしたいのはもっと:
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
.
など。これはあなたが望むさまざまなタグを付けます。 (NFCAまたはNFCBなど)これらの技術のいくつかは、NFCAとUltralightやNDEFのように、これらの技術のいくつかが一緒に行く。だからあなたがNFCAとNDEFのカードをキャッチしたいのであれば、
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
.
今、タグの技術と最もよく一致するアプリは起動するか、選択メニューに表示されます。しかし、NDEF_Discovered Tech_Discoveredの優先順位を取得します。 NDEF_Discovered Intent Launcherは、どのタグが渡されるかに非常に固有のものになる可能性があります。いくつかの形式のNDEF(MIMEタイプ)では、「すべての」フィルタを「キャッチすべて」フィルタ(MIMEの場合は「 / 」を許可します。 (URIフォーマットのNDEFレコードのように)それらのために、それをターゲットにしている特定のアプリがある場合は、それを知って構築していない限り、あなたのアプリが起動されることを保証することはできません。また、NDEFタグ(MIMEまたはURI、両方ではない)に複数のインテントフィルタを持つことができませんでした。しかし、それは私が十分に頑張っていないということかもしれません。
と別のアプリが同じことをしようとしたら(できるだけ多くのタグをキャッチ)、常にそれと呼ばれます。したがって、電話機に唯一のアプリを持っていない限り、すべてのタグをキャッチする方法はありません。しかし、上記のようなテクニカルリストコードをフォーマットすると、たくさん近づくでしょう。
他のヒント
前景色ディスパッチングで理論的に実行することができます:
> http://developer.android.com/ガイド/トピック/ NFC / ADVANCED-NFC.HTML#前景ディスパッチ
すべてのNDEF_Discovered MIMEタイプ( / )、次にすべてのTech_Discovered TechnologiesとTag_Discovered Intentを処理する必要があります。あなたのアプリはフォアグラウンドになければなりません。その他のアプリは常にアプリと同じ意図を処理できるため、アプリが開始されることはできません。