假設在nexus s手機上裝了3種nfc相應程式(每種應用程式的啟動頁就是乙個activity),分別對應三種過濾器,那麼當乙個tag靠近時,nexus s究竟選擇哪種應用程式來處理呢?按照以下的規則,該規則成為intent發布系統規則:
activity a中對intent過濾器設定了android.nfc.action.ndef_discovered的判斷規則;
<
intent-filter
>
<
action
android:name
="android.nfc.action.ndef_discovered"
/>
<
data
android:mimetype
="text/plain"
/>
intent-filter
>
activity b中對intent過濾器設定了android.nfc.action.tech_discovered的判斷規則;
android:resource="@xml/filter_nfc" />
activity c中對intent過濾器設定了android.nfc.action.tag_discovered的判斷規則;
1、按照優先順序(android.nfc.action.ndef_discovered優先順序最高),會先去判斷請求是否滿足activity a(因為a用的是ndef_discovered)中的intent過濾器規則,先判斷請求是否是ndef_discovered格式的資料(action name),另外再判斷ndef_discovered資料的型別(action type),是純文字還是智慧型海報,只有與過濾器中兩個條件都要求的一致,才會選擇activity a來處理。 2
、當activity a不滿足,則判斷activity b來判斷,也就是ndef_discovered處理不了的則開始找tech_discovered。activity b的intent過濾器中選擇了根據tech_discovered來過濾,也就是請求tag的nfc規範必須滿足tech_discovered設定的iso14443-4、iso14443-3a
,或者iso14443-3b
種的一種或幾種。tech_discovered過濾必須要定義乙個xml檔案來篩選所要支援的tech的模式,根據
android:resource="@xml/filter_nfc" />
來關聯對應的tech過濾器filter_nfc檔案。在filter_nfc.xml中,只有符合了….標籤之間定義的nfc標準,該activity才會相應,否則則都被activity設定的intent過濾器給pass掉。 3
、當請求intent對於ndef_discovered和tech_discovered規則都不滿足的時候,則intent才開始找intent過濾規則為android.nfc.action.tag_discovered的activity,也就是activity c。tag_discovered的過濾規則是最不嚴格的,只要符合nfc規範中的任一種則都會響應,所以在android中,它的優先順序是最低的,否則一開始就選擇tag_discovered來相應,activity無法獲得tag更詳細的一些資訊,比如tag滿足的nfc規範或者ndef型別等。
Android NFC讀卡以及NFC的三種模式
第一步新增許可權 第二步 在需要讀取卡內容的地方寫下面的內容 suppresslint newapi override protected void onresume suppresslint newapi override protected void onpause override prote...
三種工廠模式
本文介紹設計模式中的工廠模式。工廠模式,顧名思義,就是本來我們需要某樣東西,需要自己造,可有了工廠呢?我需要該東西時,只需告訴工廠,工廠就會生產該東西,一定程度上,把使用者和生產者分開了。解耦了。追本溯源,假設我們現在有乙個類a,類a裡需要類b的乙個物件,一般的處理是這樣,b b new b 但這樣...
vi三種模式
vi 編輯器 寫原始檔 vi 檔名 三種模式 命令模式 wq 儲存退出 q 強制退出 w 儲存 q 退出 插入模式 a i o a i o esc 可視模式 v 可視 ins 替換 y p d 複製作用 gcc 編譯器 翻譯別的型別 gcc 原始檔 a.out gcc 原始檔 o 名字 編譯錯誤時不...