SlideShare uma empresa Scribd logo
1 de 11
Android NFC P2P模式開發
Android Application Development of NFC Peer-to-Peer Mode
Chun-Kai Wang (王雋凱)
IDSL - Dept. of IM - NTUST
NFC Peer-to-Peer Mode
▪ Description from Android Developers:
▪ “P2P mode, allowing the NFC device to exchange data with
other NFC peers; this operation mode is used by Android
Beam.”
2
Android Beam
▪ NFC P2P 模式是指兩個 NFC 裝置在接近彼此時完成資料的交換。
▪ 在 Android API 14+ 後,將兩個 Android 裝置之間透過 P2P 傳輸資料稱
為 Beam。
3
How to use Android Beam?
▪ 必須開啟手機的 Android Beam 功能。
▪ 要實現 Beam NDEF 訊息的應用程式 (發送端) 必須在前台,
不能是後台服務,不能處在螢幕鎖定狀態。
▪ 要接收 Beam 訊息的手機 (接收端),其螢幕不能處在螢幕
鎖定狀態。
▪ 要在 Android 手機裝置中完成 Beam 功能,其手機系統版
本必須是 API 14+。
▪ 兩個手機在進行彼此接近實現 Beam 功能時,Android 手
機畫面會顯示「Touch to Beam」,此時,使用者應該觸碰
需要 Beam NDEF 訊息的裝置。
4
Beaming NDEF Messages
▪ 使用 NfcAdapter 物件提供的兩種方法實現 Beam 功能。
▪ setNdefPushMessage()
1. 建立 NdefMessage 物件。
2. 呼叫 setNdefPushMessage() 傳入 NdefMessage 物件
▪ setNdefPushMessageCallback()
1. 在 Activity 中實作 CreateNdefMessageCallback 介面。
2. 呼叫 setNdefPushMessageCallback() 方法。
3. 在回呼函式 (createNdefMessage(NfcEvent)) 中實現 Beam Data。
5
• enableForegroundNdefPush() & disableForegroundNdefPush()
• 在 API 10 中加入 Android NFC P2P 方法,該方法已經在 API 14 被標示為
@Deprecated,被 setNdefPushMessage() 所取代。
• 可使用此方法支援較舊版本的Android NFC 裝置 (API 10 ~ 13)。
Beaming NDEF Messages (Cont.)
▪ public void setNdefPushMessage (NdefMessage message,
Activity activity, Activity... activities)
▪ 透過 Android Beam 發送靜態 NDEF Message。
▪ 在 Activity 呼叫該方法時,可以在生命週期 onDestroy() 之前,一般是在 onCreate()
中呼叫。
▪ 同時使用該方法和 setNdefPushMessageCallback() 方法時,
setNdefPushMessageCallback() 具有較高優先順序。
▪ 使用該方法時,如果 NdefMessage 為 null,則呼叫該方法的 Activity 的
setNdefPushMessage 功能將 disable。
6
Beaming NDEF Messages (Cont.)
▪ public void setNdefPushMessageCallback (
NfcAdapter.CreateNdefMessageCallback callback,
Activity activity, Activity... activities)
▪ 透過 Android Beam 發送經由 callback 函式所動態生成的 NDEF Message。
▪ 在 Activity 呼叫該方法時,可以在生命週期 onDestroy() 之前,一般是在 onCreate()
中呼叫。
▪ 同時使用該方法和 setNdefPushMessage() 方法時,該方法具有較高優先順序。
▪ 使用該方法時,如果 callback 為 null,則 Activity 的 NDEF Push 功能將 disable。
7
Beaming NDEF Messages (Cont.)
▪ setNdefPushMessage() vs. setNdefPushMessageCallback()
▪ 當應用程式 Activity 需要在任何時候都發送相同的 NDEF Message 時,可使用
setNdefPushMessage() 方法。
▪ 當應用程式 Activity 希望根據使用者不同的操作行為來進行發送時,可使用
setNdefPushMessageCallback() 方法。
▪ 當 Activity 中兩者方法都使用時,NDEF Message 只會在一處方法中被 Push,而
setNdefPushMessageCallback() 方法的優先順序高於 setNdefPushMessage() 方法。
▪ 在兩個 Android NFC 裝置接近時,如果發送端目前開啟的應用程式並沒有實現 Android
Beam 功能,系統會發送一筆預設的 NDEF Message。
▪ 如果想要阻止 Android 系統發送預設的 NDEF Message,可在 AndroidManifest.xml 中的
application 增加以下程式:
8
Receiving Beam Message
▪ 接收 Beam 訊息的方法與接收 Tag 訊息類似,實現步驟如下:
1. 在 Activity 中實作 onNewIntent(Intent) 方法,該方法會呼叫 setIntent(Intent)。
在使用 onNewIntent(Intent) 方法後,onResume() 方法會自動呼叫。
2. 在 Activity 的 onResume() 方法中,檢測目前訊息是否來自 Beam,如果是,
取得並處理該 NDEF 訊息。
3. 呼叫自定義的訊息解析函式,將取得的NDEF訊息解析並取得 Payload,
再對 Payload 進行進一步的 UI 操作。
9
protected void onNewIntent(Intent intent) {
// onResume gets called after this to handle the intent
setIntent(intent);
}
protected void onResume() {
super.onResume();
// Check to see that the Activity started due to an Android Beam
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
processIntent(getIntent());
}
}
private void processIntent(Intent intent) {
// your code here...
}
Sample Project – AndroidBeamDemo
▪ Android Beam 的操作可以參考
Android 官方的 Sample Project。
▪ Eclipse
→ File
→ New
→ Other
→ Android
→ Android Sample Project
→ Android 4.x
→ AndroidBeamDemo
10
Thank You!

Mais conteúdo relacionado

Semelhante a Android Application Development of NFC Peer-to-Peer Mode

基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part IIJoseph Chang
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台AppBen Lue
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkitLainZQ
 
Web view on the way
Web view on the wayWeb view on the way
Web view on the wayLiddle Fang
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统Tom Fan
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Chui-Wen Chiu
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》easychen
 
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)fisher zheng
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进Jun Liu
 
Network Simulator Generator TCL 2.1
Network Simulator Generator TCL 2.1Network Simulator Generator TCL 2.1
Network Simulator Generator TCL 2.1comsians
 
淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践alvis-m
 
豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017Tianwei Liu
 
React native 開發快速上手 20171106
React native 開發快速上手 20171106React native 開發快速上手 20171106
React native 開發快速上手 20171106Phoebe Pan
 
Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线kaerseng
 

Semelhante a Android Application Development of NFC Peer-to-Peer Mode (17)

基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part II
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
Web view on the way
Web view on the wayWeb view on the way
Web view on the way
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》
 
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
 
Network Simulator Generator TCL 2.1
Network Simulator Generator TCL 2.1Network Simulator Generator TCL 2.1
Network Simulator Generator TCL 2.1
 
淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践
 
豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017
 
React native 開發快速上手 20171106
React native 開發快速上手 20171106React native 開發快速上手 20171106
React native 開發快速上手 20171106
 
Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线
 

Android Application Development of NFC Peer-to-Peer Mode

  • 1. Android NFC P2P模式開發 Android Application Development of NFC Peer-to-Peer Mode Chun-Kai Wang (王雋凱) IDSL - Dept. of IM - NTUST
  • 2. NFC Peer-to-Peer Mode ▪ Description from Android Developers: ▪ “P2P mode, allowing the NFC device to exchange data with other NFC peers; this operation mode is used by Android Beam.” 2
  • 3. Android Beam ▪ NFC P2P 模式是指兩個 NFC 裝置在接近彼此時完成資料的交換。 ▪ 在 Android API 14+ 後,將兩個 Android 裝置之間透過 P2P 傳輸資料稱 為 Beam。 3
  • 4. How to use Android Beam? ▪ 必須開啟手機的 Android Beam 功能。 ▪ 要實現 Beam NDEF 訊息的應用程式 (發送端) 必須在前台, 不能是後台服務,不能處在螢幕鎖定狀態。 ▪ 要接收 Beam 訊息的手機 (接收端),其螢幕不能處在螢幕 鎖定狀態。 ▪ 要在 Android 手機裝置中完成 Beam 功能,其手機系統版 本必須是 API 14+。 ▪ 兩個手機在進行彼此接近實現 Beam 功能時,Android 手 機畫面會顯示「Touch to Beam」,此時,使用者應該觸碰 需要 Beam NDEF 訊息的裝置。 4
  • 5. Beaming NDEF Messages ▪ 使用 NfcAdapter 物件提供的兩種方法實現 Beam 功能。 ▪ setNdefPushMessage() 1. 建立 NdefMessage 物件。 2. 呼叫 setNdefPushMessage() 傳入 NdefMessage 物件 ▪ setNdefPushMessageCallback() 1. 在 Activity 中實作 CreateNdefMessageCallback 介面。 2. 呼叫 setNdefPushMessageCallback() 方法。 3. 在回呼函式 (createNdefMessage(NfcEvent)) 中實現 Beam Data。 5 • enableForegroundNdefPush() & disableForegroundNdefPush() • 在 API 10 中加入 Android NFC P2P 方法,該方法已經在 API 14 被標示為 @Deprecated,被 setNdefPushMessage() 所取代。 • 可使用此方法支援較舊版本的Android NFC 裝置 (API 10 ~ 13)。
  • 6. Beaming NDEF Messages (Cont.) ▪ public void setNdefPushMessage (NdefMessage message, Activity activity, Activity... activities) ▪ 透過 Android Beam 發送靜態 NDEF Message。 ▪ 在 Activity 呼叫該方法時,可以在生命週期 onDestroy() 之前,一般是在 onCreate() 中呼叫。 ▪ 同時使用該方法和 setNdefPushMessageCallback() 方法時, setNdefPushMessageCallback() 具有較高優先順序。 ▪ 使用該方法時,如果 NdefMessage 為 null,則呼叫該方法的 Activity 的 setNdefPushMessage 功能將 disable。 6
  • 7. Beaming NDEF Messages (Cont.) ▪ public void setNdefPushMessageCallback ( NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities) ▪ 透過 Android Beam 發送經由 callback 函式所動態生成的 NDEF Message。 ▪ 在 Activity 呼叫該方法時,可以在生命週期 onDestroy() 之前,一般是在 onCreate() 中呼叫。 ▪ 同時使用該方法和 setNdefPushMessage() 方法時,該方法具有較高優先順序。 ▪ 使用該方法時,如果 callback 為 null,則 Activity 的 NDEF Push 功能將 disable。 7
  • 8. Beaming NDEF Messages (Cont.) ▪ setNdefPushMessage() vs. setNdefPushMessageCallback() ▪ 當應用程式 Activity 需要在任何時候都發送相同的 NDEF Message 時,可使用 setNdefPushMessage() 方法。 ▪ 當應用程式 Activity 希望根據使用者不同的操作行為來進行發送時,可使用 setNdefPushMessageCallback() 方法。 ▪ 當 Activity 中兩者方法都使用時,NDEF Message 只會在一處方法中被 Push,而 setNdefPushMessageCallback() 方法的優先順序高於 setNdefPushMessage() 方法。 ▪ 在兩個 Android NFC 裝置接近時,如果發送端目前開啟的應用程式並沒有實現 Android Beam 功能,系統會發送一筆預設的 NDEF Message。 ▪ 如果想要阻止 Android 系統發送預設的 NDEF Message,可在 AndroidManifest.xml 中的 application 增加以下程式: 8
  • 9. Receiving Beam Message ▪ 接收 Beam 訊息的方法與接收 Tag 訊息類似,實現步驟如下: 1. 在 Activity 中實作 onNewIntent(Intent) 方法,該方法會呼叫 setIntent(Intent)。 在使用 onNewIntent(Intent) 方法後,onResume() 方法會自動呼叫。 2. 在 Activity 的 onResume() 方法中,檢測目前訊息是否來自 Beam,如果是, 取得並處理該 NDEF 訊息。 3. 呼叫自定義的訊息解析函式,將取得的NDEF訊息解析並取得 Payload, 再對 Payload 進行進一步的 UI 操作。 9 protected void onNewIntent(Intent intent) { // onResume gets called after this to handle the intent setIntent(intent); } protected void onResume() { super.onResume(); // Check to see that the Activity started due to an Android Beam if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { processIntent(getIntent()); } } private void processIntent(Intent intent) { // your code here... }
  • 10. Sample Project – AndroidBeamDemo ▪ Android Beam 的操作可以參考 Android 官方的 Sample Project。 ▪ Eclipse → File → New → Other → Android → Android Sample Project → Android 4.x → AndroidBeamDemo 10