關於專案中的NFC使用的流程

2021-09-12 07:08:44 字數 3275 閱讀 8296

第一次做nfc,主要是做乙個記錄。

初始化的時候是這樣:

nfcutils =

newnfcutils

(this,(

));--

----

----

----

----

----

----

----

----

----

----

----

----

----

/** * 建構函式,用於初始化nfc

*/public

nfcutils

(activity activity,context context)

----

----

----

----

----

----

----

----

----

----

----

-------

/** * 檢查nfc是否開啟

*/public

static nfcadapter nfccheck

(activity activity,context mcontext)

else

}return mnfcadapter;}--

----

----

----

----

----

----

----

----

----

----

----

----

----

----

/** * 初始化nfc設定

*/public

static

void

nfcinit

(activity activity,context mcontext)

catch

(intentfilter.malformedmimetypeexception e)

mintentfilter =

newintentfilter

; mtechlist = null;}--

----

----

----

----

----

----

----

----

----

----

----

----

----

-//開啟前台排程系統

nfcutils.mnfcadapter.

enableforegrounddispatch

(this

, nfcutils.mpendingintent,

nfcutils.mintentfilter, nfcutils.mtechlist)

;

然後我們在頁面喚醒的任何時候將電子卡片靠近掃瞄的時候,會執行這樣的方法:

@override

protected void onnewintent(intent intent) catch (unsupportedencodingexception e)

}

剛開始的時候一臉懵逼,因為之前我做掃瞄的時候,差不多流程都是在頁面註冊乙個廣播接收者,然後每次掃瞄之後發出廣播,然後把資料傳回來,我看了好久也沒看到類似這樣廣播服務的東西。

我只能在初始化的時候下點功夫,很明顯,我們在開始的時候把activity傳到了nfcutil中,然後新增了nfcadapter.action_ndef_discoverednfcadapter.action_tag_discovered的過濾器,還構造了pendingintent物件

pendingintent的getactivity(context, int, intent, int)表示跳轉到乙個activity元件,真正的跳轉是由引數intent決定的。

在我們這個例子中,真正的intent是跳轉本頁面,而且頁面是以sigletop的方式顯示。

然後我們看resume中的開啟前台排程系統方法,將我們的過濾器和這個intent都放進去了,這個mnfcadapter.enableforegrounddispatch是系統的方法。

猜想

驗證

--

----

----

----

----

----

----

----adapter原始碼 --

----

----

----

----

----

----

-public

void

enableforegrounddispatch

(activity activity, pendingintent intent,

intentfilter[

] filters, string[

] techlists)}if

(activity == null || intent == null)

// 只能在resume這個方法中用這個方法if(

!activity.

isresumed()

)try

//暫停的時候自動呼叫disableforegrounddispatchinternal方法

activitythread.

currentactivitythread()

.registeronactivitypausedlistener

(activity,mforegrounddispatchlistener)

;//終於找到了乙個service

sservice.

setforegrounddispatch

(intent, filters, parcel);}

catch

(remoteexception e)

}

就上面所說,終於找到了乙個service,這個sservice是infcadapter類,infcadapter是jni實現的,這個setforegrounddispatch方法又把我們的intent和filter都丟進去了,jni的實現我們看不見,但是這差不多已經很明顯:我們類會被service重新跳轉,然後進入onnewintent方法,基本符合猜想。

關於 cdn 在專案中的使用

當我們在專案中引入公共 cdn 時,想要考慮一些東西,現在我把他描寫一下 這裡只討論免費的 cdn bootcdn 又拍雲cdnjs jsdelivr unpkg 七牛75cdn 較好用的,比較穩定的基本上就上述這些,如果有問題可用此 實時測試 如果專案一直執行在國內,可以選擇 bootcdn,又拍...

luffy專案中關於APIView的使用

views中 購物車的新增課程請求 param request return defget self,request 檢視購物車列表請求 param request return pass from rest framework.authentication import baseauthentic...

關於session校驗在專案中的使用

1.自己定義乙個類繼承ihttpmodule介面,實現裡邊的init方法,在這個方法中給請求管道的第9個事件 acquirerequeststate 註冊乙個方法在這個方法中完成,注意不要忘記web.config中完成註冊.httpmodeules 解釋一下這句話的意思。2 自己定義乙個類繼承sys...