SlideShare a Scribd company logo
Android NFC 開發環境安裝 
Android NFC Application Development Environment Setup 
Chun-Kai Wang (王雋凱) 
IDSL -Dept. of IM -NTUST
Overview 
▪Preparing Android Development Environment 
▪Installing Open NFC for Android edition 
▪Android NFC Basics 
▪Coding Hello NFC Application 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
準備Android 開發環境
Android 開發環境 
▪JDK(Java Development Kit) 
▪Java 開發套件;Android Developers 官方建議使用JDK6。 
▪Android SDK 
▪Android軟體開發套件。 
▪Eclipse 
▪跨平台整合式開發環境(IDE)。 
▪ADT Plugin for Eclipse 
▪EclipseIDE的Android開發工具套件。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC! 
Android4.0之後,Google 將AndroidSDK、Eclipse、 ADTPluginforEclipse整合 至ADTBundle,簡化 Android開發環境的安裝 步驟。
安裝JDK 
▪http://www.oracle.com/technetwork/java/javase/downloads/index.html 
▪JDK當前版本為JDK8,與Android Developers 官方建議版本不同 (JDK 6)。可前往下列網址下載JDK6版本: 
▪http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads- javase6-419409.html 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
下載ADTBundle 
▪http://developer.android.com/sdk/index.html 
▪ADTBundle 整合Android 開發必備工具,下載解壓縮後即可使用。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
安裝Open NFC
下載Open NFC Android Edition 
▪http://open-nfc.org/wp/home/downloads/ 
▪選擇4.4.1Android Edition (SDK) 版,此為穩定版本並整合Android SDK。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
安裝Open NFC 
▪將下載完成的ADTBundle 解壓縮,開啟SDKManager.exe。 
▪配合Open NFC for Android版本,點選Android 4.0.3 (API15) 進行安裝 程序。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
安裝Open NFC(Cont.) 
▪將Open NFC SDK for Android v4.4.1解壓縮,複製OpenNFC_AddOn資 料夾內的檔案至ADTBundle目錄下的add-ons資料夾內。 
▪重新開啟SDK Manager.exe,如下圖表示已安裝完成。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
創建NFC模擬器 
▪開啟eclipse.exe,點選下列圖示開啟Android Virtual Device (AVD) Manager。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
創建NFC模擬器(Cont.) 
▪開啟AVD後點選Create, 進行模擬器設定。 
▪如右圖所示,確認Target 為 OpenNFC4.4.1後,點選OK。 
▪返回AVDManager, 選擇剛剛創建的 模擬器,點選Start 即可啟動模擬器。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
設定NFC模擬器 
▪啟動模擬器後,在Apps 找到Settings Open NFC。 
▪選取NFC Controller simulator。 
▪輸入IPAddress 後勾選 Enabled/disabled NFC。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
設定Connection Center 
▪在Open NFC SDK for Android v4.4.1 目錄下找到connection_center資料 夾,開啟Connection Center.exe,勾選以下項目。 
▪重新開啟Connection Center.exe,確認設定已儲存。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
測試應用程式 
1.開啟Connection Center 
▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/connection_center/Connection Center.exe 
2.開啟NfcSimulator 
▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/nfcc_simulator/NfcSimulator.exe 
3.啟動NFCDevice模擬器 
▪確認模擬器已完成Open NFC 設定 
4.執行應用程式 
▪請注意開啟順序不同可能造成NFC功能無法正常運作。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
AndroidNFC 開發基礎
What is NFC? 
▪Near Field Communication 
▪以RFID為基礎,是一種短距離非接觸式的通訊方式。 
▪作用於13.56MHz頻帶,傳輸距離約10cm。 
▪NFC vs. RFID 
▪NFC是RFID技術中一個專門的子集,可視為高頻(HF) RFID技術的分支,工作在13.56MHz頻帶。 
▪NFC裝置能夠同時具有NFC讀取器和NFC標籤,此種特 性允許NFC做點對點(peer-to-peer)的傳輸。 
▪NFC 是一種近距離的私密通訊方式,安全性比RFID更 高。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NFCModes 
▪讀寫模式(Reader/Writer Mode) 
▪NFC裝置具備非接觸式讀取器,可讀寫外部非接觸式卡片資訊。 
▪點對點模式(P2P Mode) 
▪NFC裝置可和其他NFC 裝置進行資料交換。 
▪卡片模擬模式(Card Emulation Mode) 
▪NFC裝置可模擬成一張非接觸式卡片,與讀卡機進行互動。 
▪Android Support 
▪Tag Reading –since Android 2.3 (API 9) 
▪Tag Writing –since Android 2.3.3 (API 10) 
▪Beam (P2P) –Since Android ICS 4.0 (API 14) 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NFC on Android 
▪When NFC can work in Android? 
▪在Android 裝置設定中啟用NFC功能。 
▪Android 裝置螢幕未被鎖定。 
▪The Tag Dispatch System 
▪當Android 裝置發現一個NFC Tag,最好的作法是自動啟動對應的 應用程式,而不是詢問使用者選擇。 -因為選擇的動作可能會讓使用者必須將裝置離開Tag。 
▪因此Android 提供Tag Dispatch System 協助處理: 
▪解析出NFC tag 且找出MIME type 或URI 來確定Tag 裡的資料。 
▪將MIME type 或URI,和資料一起封裝進一個Intent object。 
▪基於建立好的Intent object 來啟動Activity。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NFCTag Dispatch System 
▪Tag Dispatch系統定義三種intents,其優先權由高而低為: 
▪ACTION_NDEF_DISCOVERED 
▪當tag內容包括一個NDEF payload與具有可識別的類型被掃瞄到, 該intent被用來啟動一個Activity。 
▪ACTION_TECH_DISCOVERED 
▪如果沒有activities註冊處理ACTION_NDEF_DISCOVERED該intent, tag dispatch system會發啟一個ACTION_TECH_DISCOVER的intent 給對應的應用程式進行處理。 
▪ACTION_TAG_DISCOVERED 
▪如果沒有activities註冊處理ACTION_NDEF_DISCOVERED、 ACTION_TECH_DISCOVERED的intents,將會發啟該intent。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NFC Tag Dispatch System (Cont.) 
▪基本的Tag Dispatch System處理流程如下圖: 
▪Android NFC 應用程式開發是使用Intents 與Intent Filters機制處理裝置偵測到的tag。 關於Intents 與Intent Filters的詳細說明,請參閱Android Developers 官方文件: 
▪http://developer.android.com/guide/components/intents-filters.html 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
How to use Android NFC API? 
▪設定Android Manifest 
▪宣告存取NFC硬體許可權 
▪宣告支援最低的SDK版本 
▪指定Android 裝置須配備NFC功能才可安裝( for Google Play) 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC! 
<uses-permission android:name="android.permission.NFC" /> 
<uses-sdkandroid:minSdkVersion="10" /> 
<uses-feature 
android:name="android.hardware.nfc" android:required="true" />
NFC API Overview 
▪android.nfc套件(Package) 主要提供了NFC裝置對NFCTag 讀寫NDEF 訊息的操作,以及兩個NFC 裝置之間的資料交換的功能函式。 
▪詳細的API操作方式,可參考Android Developers 官方文件: 
▪http://developer.android.com/guide/topics/connectivity/nfc/ 
▪http://developer.android.com/reference/android/nfc/package-summary.html 
Class 
Description 
NdefMessage 
Represents an immutable NDEF Message. 
NdefRecord 
Represents an immutable NDEF Record. 
NfcAdapter 
Represents the local NFC adapter. 
NfcEvent 
Wraps information associated with any NFC event. 
NfcManager 
High level manager used to obtain an instance of anNfcAdapter. 
Tag 
Represents an NFC tag that has been discovered. 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NfcAdapter 
▪NfcAdapter是定義在android.nfc套件中的類別。 
▪判斷目前裝置是否支持或啟動NFC功能,可透過以下方法(method): 
▪public static NfcAdaptergetDefaultAdapter(Context context) 
▪取得預設的NFC介面卡。 
▪回傳null代表該裝置不支援NFC。 
▪public booleanisEnabled() 
▪判斷目前裝置NFC 功能是否啟動。 
▪回傳true 代表NFC功能已啟動;回傳false 代表NFC功能尚未啟動。 
▪public Boolean isNdefPushEnabled() 
▪判斷目前裝置Beam 功能是否啟動。 
▪回傳true 代表Beam功能已啟動;回傳false 代表Beam功能尚未啟動。 
▪用於P2P開發模式。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
Foreground Dispatch System 
▪Foreground Dispatch System是一種用於在執行的程式(前 台呈現的Activity)中處理NFC tag 的方法。 
▪允許Activity 攔截Intent物件,並且宣告該Activity 的優先順序比 其他處理Intent 物件的Activity 高。 
▪使用說明: 
1.在Activity 的onCreate() 方法中增加下列程式: 
▪建立一個PendingIntent物件,以便Android 系統能夠在掃描到NFC tag 時,用它來封裝NFC tag 的詳細資訊。 
PendingIntentpendingIntent= PendingIntent.getActivity(this, 0, new Intent(this, getClass()) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
Foreground Dispatch System(Cont.) 
▪使用Intent Filter 來處理想要截獲的Intent 物件。 
▪可宣告一個tag technologies陣列來處理支援的NFC tag。 
techListsArray= new String[][] { new String[] { NfcF.class.getName() } }; 
IntentFilterndef= new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); 
try { 
ndef.addDataType("*/*"); /* Handles all MIME based dispatches. 
You should specify only the onesthat you need. */ 
} 
catch (MalformedMimeTypeExceptione) { 
throw new RuntimeException("fail", e); 
} 
intentFiltersArray= new IntentFilter[] {ndef, }; 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
2.覆寫Activity 生命週期的方法(method),以決定啟用Foreground Dispatch System 的時機,並在onNewIntent() 內處理掃描的Tag 物件。 
▪關於Activity 生命週期的介紹,可參考: 
▪http://developer.android.com/guide/components/activities.html 
public void onPause() { 
super.onPause(); 
mAdapter.disableForegroundDispatch(this); 
} 
public void onResume() { 
super.onResume(); 
mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); 
} 
public void onNewIntent(Intent intent) { 
Tag tagFromIntent= intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
// do something with tagFromIntent 
} 
Foreground Dispatch System(Cont.) 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
Hello NFC!
新增AndroidApplication 專案 
▪File → New → Android Application Project 
▪Android在API9開始引入NFC功能,不過於API10才有較好的支援, 因此我們在Minimum Required SDK 選單下選擇API10。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
Android 應用程式結構 
▪src:原始檔案目錄 
▪gen:索引檔案目錄 
▪assets:資源檔目錄 
▪bin:可執行檔目錄 
▪libs:第三方JAR檔案 
▪res:資源檔目錄 
▪AndroidManifest.xml:定義整個應用程式的框架 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
設定AndroidManifest 
▪新建專案後,打開AndroidManifest.xml,加入以下片段: 
▪紅色框選部分代表App 最低要求的手機系統版本為API10+(Android 2.3.3)以及獲取NFC硬體的操作權限,並且是配備NFC功能的手機。 
▪藍色框選部分代表如果日後要將App 上傳至Google Play,使用者必須 是支持NFC功能的裝置才可以安裝此應用程式。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
設置佈局 
▪新建專案時,預設新增MainActivity,此為App 啟動的第一個Activity, 應會在res/layout目錄下找到對應的activity_main.xml,將其修改佈 局如下: 
▪此Layout 定義了一個RelativeLayout(相對佈局),可以讓子視圖根據 它的父視圖或其他視圖指定本身的相對位置。 
▪在RelativeLayout底下我們配置一個用以顯示文字的TextView元件, 並且設置為垂直水平置中。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
加入字串清單 
▪在res/values 目錄下找到strings.xml,加入以下字串清單。 
▪app_name:應用程式名稱。 
▪nfc_unsupported:Android裝置不支援NFC功能時,所顯示的文字訊息。 
▪nfc_disabled:Android裝置尚未開啟NFC功能時,所顯示的文字訊息。 
▪nfc_ready:NFC功能已準備就緒時,所顯示的文字訊息。 
▪hello_nfc:當Android裝置偵測到Tag 時,所顯示的NFC訊息。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
新增NfcActity類別 
▪在src目錄下的package 點擊右鍵→ New → Class 
▪Name: NfcActivity 
▪Modifiers: public, abstract 
▪Superclass: android.app.Activity 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NfcActivity說明 
▪NfcActivity是自定義的抽象類別,繼承於android.app.Activity。 
▪NfcActivity包含Foreground Dispatch System,以及操作NFC的方法 (method)。我們所定義的抽象方法說明如下: 
▪protected abstract void onNfcFeatureNotFound(); 
▪當Android裝置不支持NFC功能時,呼叫該方法。 
▪protected abstract void onNfcStateEnabled(); 
▪當Android裝置NFC 功能已啟動時,呼叫該方法。 
▪protected abstract void onNfcStateDisabled(); 
▪當Android裝置NFC 功能未啟動時,呼叫該方法。 
▪protected abstract void onTagDiscovered(Intent intent); 
▪當Android裝置偵測到Tag 時,呼叫該方法。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NfcActivity.java 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NfcActivity.java (Cont.) 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
NfcActivity.java (Cont.) 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
MainActivity說明 
▪MainActivity是Android 新建專案時預設的Activity,代表App執行時 所啟動的第一個Activity。 
▪預設執行的Activity 可在AndroidManifest.xml中設定。 
▪預設MainActivity所對應的UI佈局為: 
▪res/layout/activity_main.xml 
▪預設MainActivity繼承於android.app.Activity。請將繼承類別改為我們 自定義的NfcActivity。 
▪MainActivity為具象類別(concrete class),因此必須覆寫(override) NfcActivity所定義的抽象方法(abstract method)。 
▪在MainActivity所實作的方法內做適當的操作。 
▪onNfcFeatureNotFound()、onNfcStateEnabled()、 onNfcStateDisabled()、onTagDiscovered()。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
MainActivity.java 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
測試應用程式 
1.開啟Connection Center 
▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/connection_center/Connection Center.exe 
2.開啟NfcSimulator 
▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/nfcc_simulator/NfcSimulator.exe 
3.啟動NFCDevice模擬器 
▪確認模擬器已完成Open NFC 設定 
4.執行應用程式 
▪請注意開啟順序不同可能造成NFC功能無法正常運作。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
執行Hello NFC 
▪HelloNFC專案點擊右鍵→ Run As→ Android Application 
▪選擇創建的NFCDevice(或其他支援NFC的Android Device), 將我們寫好的應用程式安裝至選取的Android Device中。 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
Hello NFC! 
▪打開NfcSimulator.exe選擇一NFCTag。 
▪如被成功偵測,該NFCTag 呈現綠燈, 裝置螢幕上顯示「Hello NFC!」字樣! 
準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
References 
▪[1]V. Subtil, Near Field Communication with AndroidCookbook. PacktPublishing Ltd, 2014. 
▪[2]Android Developers, http://developer.android.com/ 
▪[3] The Open NFC Project, http://open-nfc.org/
Thank You!

More Related Content

Similar to Android NFC Application Development Environment Setup

Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門
Roy Chen
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorial
Roy Chen
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
imShining @DevCamp
 
Android開發app
Android開發appAndroid開發app
Android開發app
騰昱 魏
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置
My own sweet home!
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
heyfluke
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
heyfluke
 
GDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdfGDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdf
Duran Hsieh
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkitLainZQ
 
行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto MarketMy own sweet home!
 
Flutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCUFlutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCU
秀吉(Hsiu-Chi) 蔡(Tsai)
 
Android ADK
Android ADKAndroid ADK
Android ADK
艾鍗科技
 
Android程式設計(6)
Android程式設計(6)Android程式設計(6)
Android程式設計(6)
Roy Wang
 
Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
InMobi_IAT SDK介接說明(二)
InMobi_IAT SDK介接說明(二)InMobi_IAT SDK介接說明(二)
InMobi_IAT SDK介接說明(二)沛豈 謝
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App
Ben Lue
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
Will Huang
 
炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建
Johnny Sung
 
React native 開發快速上手 20171106
React native 開發快速上手 20171106React native 開發快速上手 20171106
React native 開發快速上手 20171106
Phoebe Pan
 
Flutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCUFlutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCU
秀吉(Hsiu-Chi) 蔡(Tsai)
 

Similar to Android NFC Application Development Environment Setup (20)

Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorial
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
Android開發app
Android開發appAndroid開發app
Android開發app
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
GDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdfGDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdf
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market
 
Flutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCUFlutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCU
 
Android ADK
Android ADKAndroid ADK
Android ADK
 
Android程式設計(6)
Android程式設計(6)Android程式設計(6)
Android程式設計(6)
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
InMobi_IAT SDK介接說明(二)
InMobi_IAT SDK介接說明(二)InMobi_IAT SDK介接說明(二)
InMobi_IAT SDK介接說明(二)
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建炎炎夏日學 Android 課程 - Part 0: 環境搭建
炎炎夏日學 Android 課程 - Part 0: 環境搭建
 
React native 開發快速上手 20171106
React native 開發快速上手 20171106React native 開發快速上手 20171106
React native 開發快速上手 20171106
 
Flutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCUFlutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCU
 

Android NFC Application Development Environment Setup

  • 1. Android NFC 開發環境安裝 Android NFC Application Development Environment Setup Chun-Kai Wang (王雋凱) IDSL -Dept. of IM -NTUST
  • 2. Overview ▪Preparing Android Development Environment ▪Installing Open NFC for Android edition ▪Android NFC Basics ▪Coding Hello NFC Application 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 4. Android 開發環境 ▪JDK(Java Development Kit) ▪Java 開發套件;Android Developers 官方建議使用JDK6。 ▪Android SDK ▪Android軟體開發套件。 ▪Eclipse ▪跨平台整合式開發環境(IDE)。 ▪ADT Plugin for Eclipse ▪EclipseIDE的Android開發工具套件。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC! Android4.0之後,Google 將AndroidSDK、Eclipse、 ADTPluginforEclipse整合 至ADTBundle,簡化 Android開發環境的安裝 步驟。
  • 5. 安裝JDK ▪http://www.oracle.com/technetwork/java/javase/downloads/index.html ▪JDK當前版本為JDK8,與Android Developers 官方建議版本不同 (JDK 6)。可前往下列網址下載JDK6版本: ▪http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads- javase6-419409.html 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 6. 下載ADTBundle ▪http://developer.android.com/sdk/index.html ▪ADTBundle 整合Android 開發必備工具,下載解壓縮後即可使用。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 8. 下載Open NFC Android Edition ▪http://open-nfc.org/wp/home/downloads/ ▪選擇4.4.1Android Edition (SDK) 版,此為穩定版本並整合Android SDK。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 9. 安裝Open NFC ▪將下載完成的ADTBundle 解壓縮,開啟SDKManager.exe。 ▪配合Open NFC for Android版本,點選Android 4.0.3 (API15) 進行安裝 程序。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 10. 安裝Open NFC(Cont.) ▪將Open NFC SDK for Android v4.4.1解壓縮,複製OpenNFC_AddOn資 料夾內的檔案至ADTBundle目錄下的add-ons資料夾內。 ▪重新開啟SDK Manager.exe,如下圖表示已安裝完成。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 11. 創建NFC模擬器 ▪開啟eclipse.exe,點選下列圖示開啟Android Virtual Device (AVD) Manager。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 12. 創建NFC模擬器(Cont.) ▪開啟AVD後點選Create, 進行模擬器設定。 ▪如右圖所示,確認Target 為 OpenNFC4.4.1後,點選OK。 ▪返回AVDManager, 選擇剛剛創建的 模擬器,點選Start 即可啟動模擬器。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 13. 設定NFC模擬器 ▪啟動模擬器後,在Apps 找到Settings Open NFC。 ▪選取NFC Controller simulator。 ▪輸入IPAddress 後勾選 Enabled/disabled NFC。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 14. 設定Connection Center ▪在Open NFC SDK for Android v4.4.1 目錄下找到connection_center資料 夾,開啟Connection Center.exe,勾選以下項目。 ▪重新開啟Connection Center.exe,確認設定已儲存。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 15. 測試應用程式 1.開啟Connection Center ▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/connection_center/Connection Center.exe 2.開啟NfcSimulator ▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/nfcc_simulator/NfcSimulator.exe 3.啟動NFCDevice模擬器 ▪確認模擬器已完成Open NFC 設定 4.執行應用程式 ▪請注意開啟順序不同可能造成NFC功能無法正常運作。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 17. What is NFC? ▪Near Field Communication ▪以RFID為基礎,是一種短距離非接觸式的通訊方式。 ▪作用於13.56MHz頻帶,傳輸距離約10cm。 ▪NFC vs. RFID ▪NFC是RFID技術中一個專門的子集,可視為高頻(HF) RFID技術的分支,工作在13.56MHz頻帶。 ▪NFC裝置能夠同時具有NFC讀取器和NFC標籤,此種特 性允許NFC做點對點(peer-to-peer)的傳輸。 ▪NFC 是一種近距離的私密通訊方式,安全性比RFID更 高。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 18. NFCModes ▪讀寫模式(Reader/Writer Mode) ▪NFC裝置具備非接觸式讀取器,可讀寫外部非接觸式卡片資訊。 ▪點對點模式(P2P Mode) ▪NFC裝置可和其他NFC 裝置進行資料交換。 ▪卡片模擬模式(Card Emulation Mode) ▪NFC裝置可模擬成一張非接觸式卡片,與讀卡機進行互動。 ▪Android Support ▪Tag Reading –since Android 2.3 (API 9) ▪Tag Writing –since Android 2.3.3 (API 10) ▪Beam (P2P) –Since Android ICS 4.0 (API 14) 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 19. NFC on Android ▪When NFC can work in Android? ▪在Android 裝置設定中啟用NFC功能。 ▪Android 裝置螢幕未被鎖定。 ▪The Tag Dispatch System ▪當Android 裝置發現一個NFC Tag,最好的作法是自動啟動對應的 應用程式,而不是詢問使用者選擇。 -因為選擇的動作可能會讓使用者必須將裝置離開Tag。 ▪因此Android 提供Tag Dispatch System 協助處理: ▪解析出NFC tag 且找出MIME type 或URI 來確定Tag 裡的資料。 ▪將MIME type 或URI,和資料一起封裝進一個Intent object。 ▪基於建立好的Intent object 來啟動Activity。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 20. NFCTag Dispatch System ▪Tag Dispatch系統定義三種intents,其優先權由高而低為: ▪ACTION_NDEF_DISCOVERED ▪當tag內容包括一個NDEF payload與具有可識別的類型被掃瞄到, 該intent被用來啟動一個Activity。 ▪ACTION_TECH_DISCOVERED ▪如果沒有activities註冊處理ACTION_NDEF_DISCOVERED該intent, tag dispatch system會發啟一個ACTION_TECH_DISCOVER的intent 給對應的應用程式進行處理。 ▪ACTION_TAG_DISCOVERED ▪如果沒有activities註冊處理ACTION_NDEF_DISCOVERED、 ACTION_TECH_DISCOVERED的intents,將會發啟該intent。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 21. NFC Tag Dispatch System (Cont.) ▪基本的Tag Dispatch System處理流程如下圖: ▪Android NFC 應用程式開發是使用Intents 與Intent Filters機制處理裝置偵測到的tag。 關於Intents 與Intent Filters的詳細說明,請參閱Android Developers 官方文件: ▪http://developer.android.com/guide/components/intents-filters.html 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 22. How to use Android NFC API? ▪設定Android Manifest ▪宣告存取NFC硬體許可權 ▪宣告支援最低的SDK版本 ▪指定Android 裝置須配備NFC功能才可安裝( for Google Play) 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC! <uses-permission android:name="android.permission.NFC" /> <uses-sdkandroid:minSdkVersion="10" /> <uses-feature android:name="android.hardware.nfc" android:required="true" />
  • 23. NFC API Overview ▪android.nfc套件(Package) 主要提供了NFC裝置對NFCTag 讀寫NDEF 訊息的操作,以及兩個NFC 裝置之間的資料交換的功能函式。 ▪詳細的API操作方式,可參考Android Developers 官方文件: ▪http://developer.android.com/guide/topics/connectivity/nfc/ ▪http://developer.android.com/reference/android/nfc/package-summary.html Class Description NdefMessage Represents an immutable NDEF Message. NdefRecord Represents an immutable NDEF Record. NfcAdapter Represents the local NFC adapter. NfcEvent Wraps information associated with any NFC event. NfcManager High level manager used to obtain an instance of anNfcAdapter. Tag Represents an NFC tag that has been discovered. 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 24. NfcAdapter ▪NfcAdapter是定義在android.nfc套件中的類別。 ▪判斷目前裝置是否支持或啟動NFC功能,可透過以下方法(method): ▪public static NfcAdaptergetDefaultAdapter(Context context) ▪取得預設的NFC介面卡。 ▪回傳null代表該裝置不支援NFC。 ▪public booleanisEnabled() ▪判斷目前裝置NFC 功能是否啟動。 ▪回傳true 代表NFC功能已啟動;回傳false 代表NFC功能尚未啟動。 ▪public Boolean isNdefPushEnabled() ▪判斷目前裝置Beam 功能是否啟動。 ▪回傳true 代表Beam功能已啟動;回傳false 代表Beam功能尚未啟動。 ▪用於P2P開發模式。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 25. Foreground Dispatch System ▪Foreground Dispatch System是一種用於在執行的程式(前 台呈現的Activity)中處理NFC tag 的方法。 ▪允許Activity 攔截Intent物件,並且宣告該Activity 的優先順序比 其他處理Intent 物件的Activity 高。 ▪使用說明: 1.在Activity 的onCreate() 方法中增加下列程式: ▪建立一個PendingIntent物件,以便Android 系統能夠在掃描到NFC tag 時,用它來封裝NFC tag 的詳細資訊。 PendingIntentpendingIntent= PendingIntent.getActivity(this, 0, new Intent(this, getClass()) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 26. Foreground Dispatch System(Cont.) ▪使用Intent Filter 來處理想要截獲的Intent 物件。 ▪可宣告一個tag technologies陣列來處理支援的NFC tag。 techListsArray= new String[][] { new String[] { NfcF.class.getName() } }; IntentFilterndef= new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); /* Handles all MIME based dispatches. You should specify only the onesthat you need. */ } catch (MalformedMimeTypeExceptione) { throw new RuntimeException("fail", e); } intentFiltersArray= new IntentFilter[] {ndef, }; 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 27. 2.覆寫Activity 生命週期的方法(method),以決定啟用Foreground Dispatch System 的時機,並在onNewIntent() 內處理掃描的Tag 物件。 ▪關於Activity 生命週期的介紹,可參考: ▪http://developer.android.com/guide/components/activities.html public void onPause() { super.onPause(); mAdapter.disableForegroundDispatch(this); } public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } public void onNewIntent(Intent intent) { Tag tagFromIntent= intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // do something with tagFromIntent } Foreground Dispatch System(Cont.) 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 29. 新增AndroidApplication 專案 ▪File → New → Android Application Project ▪Android在API9開始引入NFC功能,不過於API10才有較好的支援, 因此我們在Minimum Required SDK 選單下選擇API10。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 30. Android 應用程式結構 ▪src:原始檔案目錄 ▪gen:索引檔案目錄 ▪assets:資源檔目錄 ▪bin:可執行檔目錄 ▪libs:第三方JAR檔案 ▪res:資源檔目錄 ▪AndroidManifest.xml:定義整個應用程式的框架 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 31. 設定AndroidManifest ▪新建專案後,打開AndroidManifest.xml,加入以下片段: ▪紅色框選部分代表App 最低要求的手機系統版本為API10+(Android 2.3.3)以及獲取NFC硬體的操作權限,並且是配備NFC功能的手機。 ▪藍色框選部分代表如果日後要將App 上傳至Google Play,使用者必須 是支持NFC功能的裝置才可以安裝此應用程式。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 32. 設置佈局 ▪新建專案時,預設新增MainActivity,此為App 啟動的第一個Activity, 應會在res/layout目錄下找到對應的activity_main.xml,將其修改佈 局如下: ▪此Layout 定義了一個RelativeLayout(相對佈局),可以讓子視圖根據 它的父視圖或其他視圖指定本身的相對位置。 ▪在RelativeLayout底下我們配置一個用以顯示文字的TextView元件, 並且設置為垂直水平置中。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 33. 加入字串清單 ▪在res/values 目錄下找到strings.xml,加入以下字串清單。 ▪app_name:應用程式名稱。 ▪nfc_unsupported:Android裝置不支援NFC功能時,所顯示的文字訊息。 ▪nfc_disabled:Android裝置尚未開啟NFC功能時,所顯示的文字訊息。 ▪nfc_ready:NFC功能已準備就緒時,所顯示的文字訊息。 ▪hello_nfc:當Android裝置偵測到Tag 時,所顯示的NFC訊息。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 34. 新增NfcActity類別 ▪在src目錄下的package 點擊右鍵→ New → Class ▪Name: NfcActivity ▪Modifiers: public, abstract ▪Superclass: android.app.Activity 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 35. NfcActivity說明 ▪NfcActivity是自定義的抽象類別,繼承於android.app.Activity。 ▪NfcActivity包含Foreground Dispatch System,以及操作NFC的方法 (method)。我們所定義的抽象方法說明如下: ▪protected abstract void onNfcFeatureNotFound(); ▪當Android裝置不支持NFC功能時,呼叫該方法。 ▪protected abstract void onNfcStateEnabled(); ▪當Android裝置NFC 功能已啟動時,呼叫該方法。 ▪protected abstract void onNfcStateDisabled(); ▪當Android裝置NFC 功能未啟動時,呼叫該方法。 ▪protected abstract void onTagDiscovered(Intent intent); ▪當Android裝置偵測到Tag 時,呼叫該方法。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 36. NfcActivity.java 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 37. NfcActivity.java (Cont.) 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 38. NfcActivity.java (Cont.) 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 39. MainActivity說明 ▪MainActivity是Android 新建專案時預設的Activity,代表App執行時 所啟動的第一個Activity。 ▪預設執行的Activity 可在AndroidManifest.xml中設定。 ▪預設MainActivity所對應的UI佈局為: ▪res/layout/activity_main.xml ▪預設MainActivity繼承於android.app.Activity。請將繼承類別改為我們 自定義的NfcActivity。 ▪MainActivity為具象類別(concrete class),因此必須覆寫(override) NfcActivity所定義的抽象方法(abstract method)。 ▪在MainActivity所實作的方法內做適當的操作。 ▪onNfcFeatureNotFound()、onNfcStateEnabled()、 onNfcStateDisabled()、onTagDiscovered()。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 40. MainActivity.java 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 41. 測試應用程式 1.開啟Connection Center ▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/connection_center/Connection Center.exe 2.開啟NfcSimulator ▪Open NFC SDK for Android v4.4.1 (13751) /android_sdk/nfcc_simulator/NfcSimulator.exe 3.啟動NFCDevice模擬器 ▪確認模擬器已完成Open NFC 設定 4.執行應用程式 ▪請注意開啟順序不同可能造成NFC功能無法正常運作。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 42. 執行Hello NFC ▪HelloNFC專案點擊右鍵→ Run As→ Android Application ▪選擇創建的NFCDevice(或其他支援NFC的Android Device), 將我們寫好的應用程式安裝至選取的Android Device中。 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 43. Hello NFC! ▪打開NfcSimulator.exe選擇一NFCTag。 ▪如被成功偵測,該NFCTag 呈現綠燈, 裝置螢幕上顯示「Hello NFC!」字樣! 準備 Android 開發環境 / 安裝 Open NFC / Android NFC 開發基礎 / Hello NFC!
  • 44. References ▪[1]V. Subtil, Near Field Communication with AndroidCookbook. PacktPublishing Ltd, 2014. ▪[2]Android Developers, http://developer.android.com/ ▪[3] The Open NFC Project, http://open-nfc.org/