Android近距離無線通訊---NFC基礎(三)

來源:互聯網
上載者:User

標籤:

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

Android近距離無線通訊---NFC基礎(三)(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.