ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

适用于所有类型的Android NFC Intent过滤器

2019-10-13 22:24:40  阅读:288  来源: 互联网

标签:ndef android android-intent nfc intentfilter


我想创建一个Android应用程序,处理针对所有类别和所有数据类型发现的所有NFC事件,例如NDEF,TECH和TAG.

这些意图过滤器位于我的Android Manifest文件中:

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

当事件为TAG_DISCOVERED时,此代码有效.
NDEF_DISCOVERED不要调用我的应用程序.

谁能发现我在做什么错?

解决方法:

您的意图过滤器

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

由于NFC的意图分派如何工作这一事实没有太大意义(请参阅How NFC Tags are Dispatched to Applications)

> TAG_DISCOVERED(在清单中使用时)只有在未针对匹配标签的TECH_DISCOVERED或NDEF_DISCOVERED意向注册任何应用程序时,才会触发.因此,如果您还打算注册您的应用程序以处理所有TECH_DISCOVERED和NDEF_DISCOVERED意图,通常就不需要注册TAG_DISCOVERED.
> NDEF_DISCOVERED意图过滤器需要(在许多平台版本/设备上,在某些情况下是可选的)附加要监听的其他数据类型(请参见<data ... />).没有诸如NDEF_DISCOVERED的全部意图过滤器这样的东西(尽管您可以通过将TECH_DISCOVERED用于Ndef和NdefFormatable技术来接近它). NDEF_DISCOVERED将仅匹配最特定的意图过滤器.例如,如果您注册以“ http://”开头的所有URL,则任何注册以“ http://www.example.com/”开头的URL的应用程序都将优先于您的应用程序.因此,您需要注册无数种数据类型才能获得高于所有其他应用程序的优先级.
> TECH_DISCOVERED意向过滤器需要您要侦听的标签技术的其他定义(请参见LaurentYanswer).可用技术是android.nfc.tech.*名称空间中的技术,当前:

android.nfc.tech.IsoDep
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcBarcode
android.nfc.tech.NfcF
android.nfc.tech.NfcV

您可以在XML文件中指定它们.例如,要匹配所有NfcA和所有NfcB标签,可以在名为xml / nfc_tech_filter.xml的文件中使用此标签:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
    </tech-list>
</resources>

然后,您可以使用< meta-data>附加此XML文件.标签(在< activity>标签内,但在< intent-filter>标签外:

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

标签:ndef,android,android-intent,nfc,intentfilter
来源: https://codeday.me/bug/20191013/1911050.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有