又大又粗又猛免费视频久久_国产理论在线播放_久久男人av资源网站免费软件_99国产精品无码

Android NFC P2P開發(fā)基礎(chǔ)(android nfc開發(fā)教程)

一、 Android Beam實(shí)現(xiàn)的幾種方式

在Android中,目前,Beam功能實(shí)現(xiàn)的方式可以概括為三種,分別為setNdefPushmessage callback( )、setNdefPushMessage( )以及enableForegroundNdefPush( )。

上述方法中,enableForegroundNdefPush( )是在API 10中加入的提供Android NFC P2P功能方法。從嚴(yán)格意義上,該方法并不能稱為Beam方法,API 14中加入的前面兩個(gè)方法才算真正的Beam功能。因?yàn)锽eam的概念是在API 14中提出的,其操作過(guò)程中需要用戶的介入(用戶點(diǎn)擊從而選擇Beam的發(fā)送端),所以,此處為了描述方便(且Beam功能的本質(zhì)也即P2P),故將其與Beam功能放一處,讀者只需搞清其中的原因即可。

1.enableForegroundNdefPush( )方法的原型

void enableForegroundNdefPush(activity activity, NdefMessage message):在指定的activity中,enable前臺(tái)通過(guò)P2P Push NDEF消息功能。

其中,activity為前臺(tái)activity;message為將要Push的NDEF消息。當(dāng)調(diào)用該方法的該activity不再前臺(tái)時(shí),將會(huì)拋出異常。

使用enableForegroundNdefPush()方法時(shí),應(yīng)注意以下幾點(diǎn):

(1)在activity中,必須確保每次Resume時(shí),調(diào)用該方法,同時(shí)每次Paused時(shí)調(diào)用disable ForegroundNdefPush方法;

(2)Android官方強(qiáng)烈推薦使用setNdefPushMessage方法(API 14 )代替該方法,因?yàn)閟etNdefPushMessage方法將自動(dòng)根據(jù)Android的生命周期來(lái)使能,無(wú)需開發(fā)者自己enable和disable;

(3)activity在調(diào)用該方法時(shí),必須是在主線程中;

(4)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(5)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

2.disableForegroundNdefPush ( )方法的原型

void disableForegroundNdefPush(Activity activity):在指定的activity中,disable 通過(guò)P2P Push NDEF消息的功能。

其中,activity為前臺(tái)activity。如果當(dāng)調(diào)用該方法的該activity已經(jīng)停止了(paused),那么將會(huì)拋出異常信息。

使用disableForegroundNdefPush()方法時(shí),應(yīng)注意以下幾點(diǎn):

(1)activity在調(diào)用該方法時(shí),必須在onPause( )之前;

(2)activity在調(diào)用該方法時(shí),必須是在主線程中;

(3)Android官方強(qiáng)烈推薦使用setNdefPushMessage方法(API 14 )代替該方法,因?yàn)閟etNdefPushMessage方法將自動(dòng)根據(jù)Android的生命周期來(lái)使能,無(wú)需開發(fā)者自己enable和disable;

(4)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(5)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

setNdefPushMessageCallback( )和setNdefPushMessage( )是API 14 中加入的實(shí)現(xiàn)Beam功能的方法。setNdefPushMessage( )中把接收到的NdefMessage對(duì)象作為一個(gè)消息設(shè)置給Beam,當(dāng)兩個(gè)設(shè)備足夠近的時(shí)候,就會(huì)自動(dòng)的發(fā)送消息;setNdefPushMessageCallback()方法中將接收包含createNdefMessage()方法的回調(diào),當(dāng)設(shè)備在發(fā)射數(shù)據(jù)的范圍內(nèi)時(shí),這個(gè)回調(diào)方法會(huì)被調(diào)用,回調(diào)會(huì)讓你只在需要的時(shí)候創(chuàng)建NDEF消息。

3.setNdefPushMessage ( )方法的原型

public void setNdefPushMessage (NdefMessage message, Activity activity, Activity… activities):通過(guò)Android Beam發(fā)送靜態(tài)NDEF消息句。

其中,message為待發(fā)送的靜態(tài)NDEF消息。為NULL時(shí),當(dāng)前activity的setNdefPushMessage功能將會(huì)disable;activity為當(dāng)前push消息的activity;activities為附加activity。強(qiáng)烈建議在每個(gè)activity中,該方法只注冊(cè)一次。

使用setNdefPushMessage()方法時(shí)注意以下幾點(diǎn):

(1)activity在調(diào)用該方法時(shí),可以在onDestroy( )之前的任何地方,官方建議在onCreate()中調(diào)用;

(2)該方法并不阻塞線程,所以可以在UI主線程中使用;

(3)使用該方法時(shí),如果message為null,則調(diào)用該方法的Activity的setNdefPushMessage功能將會(huì)disable;

(4)當(dāng)同時(shí)使用該方法和setNdefPushMessageCallback( )方法時(shí),setNdefPushMessage Callback方法具有較高優(yōu)先級(jí);

(5)如6.1.2節(jié)所述,在兩個(gè)Android NFC設(shè)備靠近時(shí),如果發(fā)送設(shè)備上(BNM)當(dāng)前打開的應(yīng)用程序并沒(méi)有實(shí)現(xiàn)Android Beam功能,那么系統(tǒng)也會(huì)自動(dòng)發(fā)送一條默認(rèn)的NDEF消息給接收端(RBM);如果要想阻止Android系統(tǒng)發(fā)送默認(rèn)的NDEF消息,那么可以在AndroidManifest.xml中的application添加如下代碼:

<application ...> <meta-data android:name="android.nfc.disable_beam_default" android:value="true" /> </application>

(6)關(guān)于該方法的使用,官方提供的使用范例如下(關(guān)于更詳細(xì)的使用方法,讀者可以參考本節(jié)后面的具體實(shí)例):

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); if (nfcAdapter == null) return; // NFC not available on this device nfcAdapter.setNdefPushMessage(ndefMessage, this); }

(7)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(8)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

4.setNdefPushMessageCallback ( ) 方法的原型

public void setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity… activities):其中,callback為回調(diào)接口;activity為待Push NDEF消息的activity;activities為附加activity選項(xiàng)。強(qiáng)烈建議在每個(gè)activity中,該方法只注冊(cè)一次。

使用setNdefPushMessageCallback()方法時(shí),應(yīng)注意以下幾點(diǎn):

(1)activity在調(diào)用該方法時(shí),可以在onDestroy( )之前的任何地方,官方建議在onCreate()中調(diào)用;

(2)該方法并不阻塞線程,所以可以在UI主線程中使用;

(3)使用該方法時(shí),如果callback為null,則該Activity的NDEF Push功能將會(huì)disable;

(4)當(dāng)同時(shí)使用該方法和 setNdefPushMessage( )方法時(shí),該方法具有較高優(yōu)先級(jí);

(5)如6.1.2節(jié)所述,在兩個(gè)Android NFC設(shè)備靠近時(shí),如果發(fā)送設(shè)備上(BNM)當(dāng)前打開的應(yīng)用程序并沒(méi)有實(shí)現(xiàn)Android Beam功能,那么系統(tǒng)也會(huì)自動(dòng)發(fā)送一條默認(rèn)的NDEF消息給接收端(RBM),如果要想阻止Android系統(tǒng)發(fā)送默認(rèn)的NDEF消息,那么可以在AndroidManifest.xml中的application添加如下代碼:

<application ...> <meta-data android:name="android.nfc.disable_beam_default" android:value="true" /> </application>

(6)關(guān)于該方法的使用,官方提供的使用范例如下(關(guān)于更詳細(xì)的使用方法,讀者可以參考本節(jié)后面的具體實(shí)例):

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); if (nfcAdapter == null) return; // NFC not available on this device nfcAdapter.setNdefPushMessageCallback(callback, this); }

(7)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(8)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

二、 Beam NDEF消息(BNM)

兩個(gè)NFC設(shè)備之間通過(guò)Beam實(shí)現(xiàn)數(shù)據(jù)傳遞時(shí),數(shù)據(jù)發(fā)送端即Beam NDEF消息端,本書中簡(jiǎn)寫為BNM(Beam NDEF Message)。在BNM時(shí),首先需要準(zhǔn)備NDEF記錄和消息。創(chuàng)建NDEF記錄和消息的方法和第5章中相同,讀者可參考第5章的相關(guān)內(nèi)容。

Android中提供了兩種BNM的方法(enableForegroundNdefPush()除外),分別為setNdefPush MessageCallback( )和setNdefPushMessage( ),下面分別對(duì)這兩種方法BNM的實(shí)現(xiàn)步驟進(jìn)行闡述,具體實(shí)例參考本章6.3中的相關(guān)內(nèi)容。

1.BNM By setNdefPushMessageCallback( )的使用步驟

(1)在Activity中實(shí)現(xiàn)CreateNdefMessageCallback接口;

(2)在需要的地方調(diào)用setNdefPushMessageCallback( )方法;

(3)在回調(diào)函數(shù)(createNdefMessage(NfcEvent))中實(shí)現(xiàn)Beam Data。

其中,在第2步中,setNdefPushMessageCallback( )中NDEF消息的生成是動(dòng)態(tài)的,開發(fā)中可以在其Activity中的任何地方實(shí)現(xiàn)調(diào)用(筆者建議首選onCreate( ))。當(dāng)有BNM發(fā)現(xiàn)有目標(biāo)設(shè)備(RBM)時(shí),系統(tǒng)會(huì)自動(dòng)激活createNdefMessage(NfcEvent)回調(diào)接口函數(shù),此時(shí),該回調(diào)接口函數(shù)中返回的NDEF消息被發(fā)送給RBM,開發(fā)者需要做的就是在回調(diào)接口中準(zhǔn)備Beam Data即可。

2.BNM By setNdefPushMessage ( )的使用步驟

(1)創(chuàng)建NDEF消息;

(2)在需要的地方調(diào)用setNdefPushMessage( )方法。

其中,在第2步中,setNdefPushMessage( )中NDEF消息的生成是靜態(tài)的,即由用戶選擇生成然后作為參數(shù)進(jìn)行傳遞。

3.setNdefPushMessageCallback( )和setNdefPushMessage( )的選擇

當(dāng)應(yīng)用程序Activity需要在任何時(shí)候都推送相同的NDEF消息時(shí),可使用setNdefPushMessage( )方法;當(dāng)應(yīng)用程序Activity希望根據(jù)用戶不同的操作行為來(lái)進(jìn)行推送時(shí),可使用setNdefPush MessageCallback( )方法。當(dāng)Activity中兩者都使用時(shí),由于setNdefPushMessageCallback( )的優(yōu)先級(jí)要高于setNdefPushMessage ( ),因此系統(tǒng)會(huì)首選setNdefPushMessageCallback( )方法。

注意,在上述兩種方法中,若NDEF消息為NULL,此時(shí),NDEF Push功能在該Activity中將被Disable。

三、 接收Beam消息(RBM)

兩個(gè)NFC設(shè)備之間通過(guò)Beam實(shí)現(xiàn)數(shù)據(jù)傳遞時(shí),數(shù)據(jù)接收端即接收Beam消息端,本書中簡(jiǎn)寫為RBM(Receive Beam Message)。接收Beam消息的方法與第五章中接收Tag消息類似,實(shí)現(xiàn)步驟如下:

(1)在應(yīng)用中實(shí)現(xiàn)onNewIntent( Intent)方法,該方法會(huì)調(diào)用setIntent(Intent),由第3章的Android生命周期描述中可知,在使用onNewIntent(Intent)方法后,onResume()方法會(huì)自動(dòng)調(diào)用;

(2)在應(yīng)用的onResume( )方法中,檢測(cè)當(dāng)前消息是否來(lái)自Beam,如果是,獲取并處理該NDEF消息;

(3)調(diào)用自己定義的消息解析函數(shù),將獲取的NDEF消息解析并獲取Payload,再對(duì)Payload進(jìn)行進(jìn)一步UI操作。

四、 enableForegroundNdefPush的使用

在API 14 的Android系統(tǒng)中,可以使用上述兩種方法實(shí)現(xiàn)Beam功能的開發(fā)。若系統(tǒng)在API 10~API 13之間,或者說(shuō)希望在API 10~API 13之間的Android系統(tǒng)的用戶也同樣能夠使用該APP,此時(shí)需要考慮第3種方式:enableForegroundNdefPush( )方法。

關(guān)于enableForegroundNdefPush( )方法可參考6.2.1節(jié)中的描述,同時(shí)還可參閱第4章中介紹的NFC前臺(tái)調(diào)度系統(tǒng)的相關(guān)知識(shí)。本節(jié)為大家介紹通過(guò)enableForegroundNdefPush( )方法實(shí)現(xiàn)Beam功能的開發(fā)步驟,具體實(shí)例參見6.3節(jié)的內(nèi)容。

通過(guò)enableForegroundNdefPush( )方法實(shí)現(xiàn)(發(fā)送端)Beam 功能開發(fā)步驟如下:

(1)創(chuàng)建需要Beam的NDEF數(shù)據(jù);

(2)在Activity需要的地方中調(diào)用enableForegroundNdefPush (Activity activity, NdefMessage message)方法;在該方法中,message為步驟1中創(chuàng)建的NDEF消息,該方法創(chuàng)建后,message處于掛起狀態(tài);一旦系統(tǒng)檢測(cè)到RBM設(shè)備,該message就會(huì)通過(guò)Beam傳輸給接收端;

(3)在應(yīng)用程序的onPause( )方法中,需要調(diào)用disableForegroundNdefPush(Activity)方法;由于這是一種前臺(tái)推送方法,因此,一旦Activity不出于前臺(tái),F(xiàn)oreground NDEF Push就要立即停止;

(4)在應(yīng)用程序的onResume( )方法中,可以通過(guò)調(diào)用enableForegroundNdefPush (Activity activity, NdefMessage message)再次啟用Foreground NDEF Push推送。

通過(guò)enableForegroundNdefPush( )方法實(shí)現(xiàn)(接收端)Beam 功能開發(fā)步驟如下:

(1)在應(yīng)用中實(shí)現(xiàn)onNewIntent( Intent)方法,在該方法中調(diào)用setIntent(Intent);由第3章介紹的Android生命周期的描述中可知,在使用onNewIntent(Intent)方法后,onResume()方法會(huì)自動(dòng)調(diào)用;

(2)在應(yīng)用程序的onResume( )方法中,檢測(cè)當(dāng)前消息是否來(lái)自Beam,如果是,獲取該NDEF消息;

(3)解析并處理接收到的NDEF數(shù)據(jù)。

上述接收端的實(shí)現(xiàn)方法其實(shí)還是NFC標(biāo)簽調(diào)度系統(tǒng)實(shí)現(xiàn)的。與enableForegroundNdefPush( )對(duì)應(yīng)的,如果需要徹底的使用前臺(tái)調(diào)度系統(tǒng),那么可以使用enableForegroundDispatch()方法。關(guān)于該方法的描述如下。

1.enableForegroundDispatch ( )方法的原型

void enableForegroundDispatch(Activity activity, PendingIntent intent, IntentFilter[] filters, String[][] techLists):在指定的activity中enable前臺(tái)dispatch功能。

其中,activity為將要dispatch to的activity;intent為將啟動(dòng)dispatch的PendingIntent;filters為過(guò)濾dispatch信息。activity為null時(shí),表示一直處理所有信息。techLists用來(lái)匹配ACTIONTECH DISCOVERED意圖。

如果當(dāng)調(diào)用該方法的該activity已經(jīng)不再前臺(tái)了,就會(huì)拋出異常信息。

使用enableForegroundDispatch()方法時(shí),應(yīng)注意以下幾點(diǎn):

(1)當(dāng)使用該方法時(shí),當(dāng)前activity發(fā)現(xiàn)有Tag信息時(shí),前臺(tái)Dispatch擁有最高優(yōu)先級(jí) ——即,第4章中所描述的當(dāng)APP同時(shí)擁有NFC前臺(tái)調(diào)度系統(tǒng)和NFC標(biāo)簽調(diào)度系統(tǒng)時(shí),NFC前臺(tái)調(diào)度系統(tǒng)優(yōu)先級(jí)高于NFC標(biāo)簽調(diào)度系統(tǒng);

(2)IntentFilter過(guò)濾dispatch信息,包括ACTIONNDEF_DISCOVERED和ACTION Tag_DISCOVERED兩種;

(3)當(dāng)APP中的filters和techLists都為NULL時(shí),當(dāng)前activity將接收所有的Tag信息通過(guò)ACTION_NDEF_DISCOVERED意圖;

(4)activity在調(diào)用該方法時(shí),必須是在主線程中,且必須是前臺(tái)activity——即,當(dāng)activity即將處于后臺(tái)時(shí)(onPause或onDestroy),需要調(diào)用disableForegroundDispatch方法;

(5)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(6)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

2.disableForegroundDispatch ( )方法的原型。

void disableForegroundDispatch(Activity activity):在指定的activity中disable前臺(tái)dispatch功能。

其中,activity為將要disable的activity。如果調(diào)用該方法的activity的ForegroundDispatch已經(jīng)disable了,就會(huì)拋出異常信息。

使用disableForegroundDispatch()方法時(shí),應(yīng)注意以下幾點(diǎn):

(1)activity在調(diào)用該方法時(shí),必須在onPause( )之前;

(2)activity在調(diào)用該方法時(shí),必須是在主線程中;

(3)使用該方法需要在AndroidManifest.xml中添加NFC權(quán)限;

(4)使用該方法需要在Android API 10 以上的系統(tǒng)中進(jìn)行。

3.具體開發(fā)步驟

(1)在應(yīng)用中實(shí)現(xiàn)onNewIntent( Intent)方法,并在該方法中調(diào)用setIntent(Intent)。由第3章所介紹的Android生命周期的描述中可知,在使用onNewIntent(Intent)方法后,onResume()方法會(huì)自動(dòng)調(diào)用。

(2)在應(yīng)用的onResume( )方法中,調(diào)用enableForegroundDispatch( ),使當(dāng)前activity的前臺(tái)調(diào)度系統(tǒng)有效。

(3)在應(yīng)用的onPause ( )方法中,調(diào)用disableForegroundDispatch ( ),使當(dāng)前activity的前臺(tái)調(diào)度系統(tǒng)disable。

本文節(jié)選自圖書《Android NFC開發(fā)實(shí)戰(zhàn)詳解》。

Android NFC P2P開發(fā)基礎(chǔ)(android nfc開發(fā)教程)

本書中,將普及NFC相關(guān)基礎(chǔ)概念和知識(shí),將剖析NFC NDEF協(xié)議,將介紹Android NFC應(yīng)用開發(fā),將闡述Android NFC體系架構(gòu),最后還會(huì)有具體實(shí)例呈現(xiàn),可以說(shuō),縱然是第一本介紹NFC的書籍,卻把NFC相關(guān)知識(shí)(除硬件)都進(jìn)行了闡述,做到了既新又全。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部