• Android近场通信---NFC基础(三)(转)


    转自 http://blog.csdn.net/think_soft/article/details/8180203

    过滤NFC的Intent

    要在你想要处理被扫描到的NFC标签时启动你的应用程序,可以在你的应用程序的Android清单中针对一种、两种或全部三种类型的NFC的Intent来过滤。但是,通常想要在应用程序启动时控制最常用的ACTION_NDEF_DISCOVERED类型的Intent。在没有过滤ACTION_NDEF_DISCOVERED类型的Intent的应用程序,或数据负载不是NDEF时,才会从ACTION_NDEF_DISCOVERED类型的Intent回退到ACTION_TECH_DISCOVERED类型的Intent。通常ACTION_TAB_DISCOVERED是最一般化的过滤分类。很多应用程序都会在过滤ACTION_TAG_DISCOVERED之前,过滤ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED,这样就会降低你的应用程序被启动的可能性。ACTION_TAG_DISCOVERED只是在没有应用程序处理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED类型的Intent的情况下,才使用的最后手段。

    因为NFC标签的多样性,并且很多时候不在你的控制之下,因此在必要的时候你要回退到其他两种类型的Intent。在你能够控制标签的类型和写入的数据时,我们建议你使用NDEF格式。下文将介绍如何过滤每种类型的Intent对象。

    ACTION_NDEF_DISCOVERED

    要过滤ACTION_NDEF_DISCOVERED类型的Intent,就要在清单中跟你想要过滤的数据一起来声明该类型的Intent过滤器。以下是过滤text/plain类型的MIME的ACTION_NDEF_DISCOVERED类型过滤器的声明:

    <intent-filter>

        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>

        <category android:name="android.intent.category.DEFAULT"/>

        <data android:mimeType="text/plain" />

    </intent-filter>

    以下示例使用http://developer.android.com/index.html格式的URI来过滤:

    <intent-filter>

        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>

        <category android:name="android.intent.category.DEFAULT"/>

       <data android:scheme="http"

                  android:host="developer.android.com"

                  android:pathPrefix="/index.html" />

    </intent-filter>

    ACTION_TECH_DISCOVERED

    如果你的Activity要过滤ACTION_TECH_DISCOVERED类型的Intent,你必须创建一个XML资源文件,该文件在tech-list集合中指定你的Activity所支持的技术。如果tech-list集合是标签所支持的技术的一个子集,那么你的Activity被认为是匹配的。通过调用getTechList()方法来获得标签所支持的技术集合。

    例如,如果扫描到的标签支持MifareClassic、NdefFormatable和NfcA,那么为了跟它们匹配,tech-list集合就必须指定所有这三种技术,或者指定其中的两种或一种。

    以下示例定义了所有的相关的技术。你可以根据需要删除其中一些设置。然后把这个文件保存到<project-root>/res/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>

    你也能够指定多个tech-list集合,每个tech-list集合被认为是独立的,并且如果任何一个tech-list集合是由getTechList()返回的技术的子集,那么你的Activity就被认为是匹配的。下列示例能够跟支持NfcA和Ndef技术NFC标签或者跟支持NfcB和Ndef技术的标签相匹配:

    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

        <tech-list>

            <tech>android.nfc.tech.NfcA</tech>

            <tech>android.nfc.tech.Ndef</tech>

        </tech-list>

    </resources>

     

    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

        <tech-list>

            <tech>android.nfc.tech.NfcB</tech>

            <tech>android.nfc.tech.Ndef</tech>

        </tech-list>

    </resources>

    在你的AndroidManifest.xml文件中,要像向下列示例那样,在<activity>元素内的<meta-data>元素中指定你创建的资源文件:

    <activity>

    ...

    <intent-filter>

        <action android:name="android.nfc.action.TECH_DISCOVERED"/>

    </intent-filter>

     

    <meta-data android:name="android.nfc.action.TECH_DISCOVERED"

        android:resource="@xml/nfc_tech_filter" />

    ...

    </activity>

    ACTION_TAG_DISCOVERED

    使用下列Intent过滤器来过滤ACTION_TAG_DISCOVERED类型的Intent:

    <intent-filter>

        <action android:name="android.nfc.action.TAG_DISCOVERED"/>

    </intent-filter>

  • 相关阅读:
    XP和Scrum的比较
    让PowerDesigner支持SQLite 3.0[转]
    对于大型公司项目平台选择j2ee的几层认识(一)
    对于大型公司项目平台选择j2ee的几层认识(三)
    Alpha、Beta、RC、GA版本的区别
    如何在XElement中使用XPath
    对于大型公司项目平台选择j2ee的几层认识(四)
    Thread与BeginInvoke
    对于大型公司项目平台选择j2ee的几层认识(二)
    修复VS 2010的Help Library管理器
  • 原文地址:https://www.cnblogs.com/SamuelSun/p/4517616.html
Copyright © 2020-2023  润新知