2

電話で検出されたすべてのタグをアプリでインターセプトしたい。そうすれば、タグの 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 タグ アプリが起動します。

すべてのタグを表示できるようにする方法についてのヒントはありますか?

4

2 に答える 2

7

まず、技術リストの仕組みは、リストされているすべての技術が AND で結合されることです。つまり、タグにすべての異なる技術がリストされている場合、インテントがアプリに渡されます。私は何も知りません。あなたがやりたいことはもっとあります:

<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>

等々。これは、必要なさまざまなタグの OR です。(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 インテント ランチャーは、渡されるタグを非常に具体的にすることができます。NDEF の一部の形式 (Mime タイプなど) では、「すべてをキャッチする」フィルター (たとえば、Mime の「/」) が許可されますが、許可されないものもあります。(uri 形式の Ndef レコードの場合と同様)。それらについては、それをターゲットとする特定のアプリがある場合、それを知って組み込まない限り、アプリが起動されることを保証できません。また、Ndef タグ (Mime OR URI、ただし両方ではない) に対して複数のインテント フィルターを使用することはできませんでした。でも、それは私の努力が足りなかったからかもしれません。

また、別のアプリが同じことをしようとすると (できるだけ多くのタグをキャッチしようとします)、常に呼び出されます。したがって、電話に唯一のアプリがない限り、すべてのタグをキャッチする方法はありません. しかし、上記のように tech-list コードをフォーマットすることで、より近づけることができます。

于 2012-01-26T01:03:54.490 に答える
2

理論的には、フォアグラウンド ディスパッチでこれを行うことができます。

http://developer.android.com/guide/topics/nfc/advanced-nfc.html#foreground-dispatch

すべての NDEF_DISCOVERED MIME タイプ ( / )、次にすべての TECH_DISCOVERED タグ テクノロジ、および TAG_DISCOVERED インテントを処理する必要があります。アプリはフォアグラウンドにある必要があります。他のアプリは常にアプリと同じインテントを処理できるため、アプリが開始されることを保証することはできません。そのため、アクティビティ チューザーが表示されます。

于 2012-01-26T20:03:35.333 に答える