4

NXPTagWriterNFCTagInfoをNexusSにインストールしました。これは、NFCアプリケーションの開発に使用したものと同じデバイスです。問題は、タグを読み取った後、[使用するアクションの完了]ダイアログにアプリケーションが表示されず、市場からインストールされた両方のみが表示されることです。しばらくデバッグした後、デモアプリケーションを使ってみましたが、結果は同じでした。ここで何が欠けていますか?インテントフィルターを適切に解析するには、アプリケーションを市場からインストールする必要がありますか?

アップデート

私のインテントフィルターは単純でした

<intent-filter>
  <action   android:name="android.nfc.action.TAG_DISCOVERED" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

マニュアルで指定されているように、1つずつ、またはすべて一緒に他のものを追加しようとしましたが、成功しませんでした。mimeタイプと関係がありますか?

NFCタグが読み取られると、これらの2行だけがアクションに関連し、他には何も関連しません。

INFO/ActivityManager(111): Starting: Intent { act=android.nfc.action.TECH_DISCOVERED flg=0x10000000 cmp=com.nxp.nfc.tagwriter/.activities.DashboardActivity (has extras) } from pid 197
INFO/ActivityManager(111): Starting: Intent { cmp=com.nxp.nfc.tagwriter/.activities.ConfirmLicenseActivity } from pid 6250

シーイングandroid.nfc.action.TECH_DISCOVEREDがトリガーされ、次のインテントフィルターを追加しました。

<intent-filter>
    <action   android:name="android.nfc.action.TECH_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/nfc_tech_filter" />

そしてres/xml/nfc_tech_filter.xml含まれています

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <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.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>
4

2 に答える 2

14

TAG_DISCOVEREDがアプリをポップアップしない理由は、これがフォールバックオプションであるためです。NDEF_DISCOVEREDインテントとTECH_DISCOVEREDインテントに一致するものが見つからない場合にのみ、TAG_DISCOVEREDがディスパッチされます。

NXPアプリはTECH_DISCOVEREDに登録されるため、アプリよりも優先されます。TECH_DISCOVEREDフィルターを含めるソリューションは正しいですが、それを行う方法は間違っています。「tech-list」ブロック内のテクノロジーは、ANDで結合されます。したがって、あなたの例では、これは、フィルターがNfcA AND NfcBANDMifareClassicを持つタグにのみ一致することを意味します。NfcAとNfcBは非常に異なるテクノロジーであり、連携しないため、このフィルターは一致しません。

本当に必要なのは、すべての異なるテクノロジーのORです。これを行うには、1つのテクノロジーのみを含む複数のブロックを作成するだけです。

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
    <tech>android.nfc.tech.NfcB</tech>
</tech-list>

これは、NfcAまたはNfc​​Bと一致します。もちろん、アプリケーションリストが乱雑になるのを防ぐために、フィルタをできるだけ正確にする必要があります。NfcAタグのみに関心がある場合は、他のタグを要求しないでください。

于 2011-04-11T13:27:12.477 に答える
0

技術リストは、カードがサポートしていると思われる技術の組み合わせで構成されている必要があります。たとえば、読みたいカードにNfcA、NfcB、MifareClassicがある場合、技術者は次のようになります。

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.NfcB</tech>
    <tech>android.nfc.tech.MifareClassic</tech>
</tech-list>

リソースに複数のtech-listタグを含めることができます。タグがリソース内の技術リストの1つと一致する場合にのみ、アプリが検出されます。

于 2011-04-06T16:01:34.957 に答える