Part16 開發NFC程式 單元80 NFC程式設計 單元81 把資料寫入NFC tag 單元82 NFC的進階用法 2.

Slides:



Advertisements
Similar presentations
新建本科院校 应用型人才培养若干问题探析 张德江.
Advertisements

位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Activity之间的数据传递.
Android + NFC 建國科技大學 資管系 饒瑞佶 2017/3 v1.
Hadoop 單機設定與啟動 step 1. 設定登入免密碼 step 2. 安裝java step 3. 下載安裝Hadoop
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
題目:十六對一多工器 姓名:李國豪 學號:B
第 1 章 使用 APP INVENTOR 2 開發 ANDROID APP
實驗十三:顯示目前經緯度位置.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Java簡介.
使用Android控制Arduino 史先强
JDK 安裝教學 (for Win7) Soochow University
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
ContentProvider與資料共享
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
實驗十四:顯示與控制地圖.
Text To Speech (TTS, 文字轉語音) 靜宜大學資管系 楊子青
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
NFC教學 哈哈哈哈哈!!.
第8章 Service解析.
手機的頁面轉換與資料傳遞.
雲端運算的基石(2) 虛擬化技術實作(XP篇─上)
Java 程式設計 講師:FrankLin.
FTP檔案上傳下載 實務與運用.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
第10章 GPS位置服务与地图编程.
Topic Introduction—RMI
VS.NET 2003 IDE.
Intent.
Ch20. 計算器 (Mac 版本).
PowerPoint 2019/4/9.
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
安裝 / 操作 flashget SOP (以Win 7 作業系統為範例)
挑戰C++程式語言 ──第8章 進一步談字元與字串
GridView.
GridView操作 (II).
如何使用Gene Ontology 網址:
網路版盤點程式 操作說明 (使用adirace盤點前兩天庫存)
Text To Speech (TTS, 文字轉語音) 靜宜大學資管系 楊子青
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
基本指令.
ZigBee PRO教學系統 CC2530 實驗.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
新進教師科展研習 王文良 資訊科,中正高工.
實驗十:影片播放.
Brief Guide of FrontPage
班級:博碩子一甲 授課老師:鐘國家 助教:陳國政
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
Android进程间通讯.
多國語系 建國科技大學 資管系 饒瑞佶.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
加速感測器 靜宜大學資管系 楊子青.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
Part 8 Broadcast Receiver、Service和App Widget
Develop and Build Drives by Visual C++ IDE
InputStreamReader Console Scanner
Presentation transcript:

Part16 開發NFC程式 單元80 NFC程式設計 單元81 把資料寫入NFC tag 單元82 NFC的進階用法 2

單元80 NFC程式設計

NFC (Near Field Communication) NFC 是一種新興的手機應用,運作方式是讓手機靠近一個含有NFC tag的裝置或是小貼片,以取得或傳送資料如圖80-1,它可以用在手機付款、個人資料交換、商品資料擷取…等。

NFC (Near Field Communication) 最基本的用法是所謂的NFC Data Exchange Format簡稱NDEF,它具有下列二種功能: 1. 從NFC tag讀取NDEF資料。 2. 從一個NFC裝置傳送NDEF資料到另一個NFC裝置。 當Android系統偵測到NFC tag時,它會利用Tag Dispatch機制來進行處理,Tag Dispatch的過程牽涉到NFC tag資料的解析和建立Intent物件 5

Android處理NFC tag資料的方式 在NFC tag中NDEF資料是封裝在一個NFC message裡面,NFC message內部可以有一個或多個record,第一個record含有以下資訊: 1.TNF (Type Name Format) 決定Type欄位的格式,TNF可以是下一頁的幾種設定值。 2.Type TNF欄位的值決定此欄位的資料格式,例如如果TNF的值是TNF_WELL_KNOWN,這個欄位就是RTD (Record Type Definition)。 3.ID record的ID編號,通常不需要設定。 4.Payload 用來儲存實際的資料,NFC message中的資料可以分開儲存在多個record中。 6

Android處理NFC tag資料的方式 TNF的設定值 說明 TNF_ABSOLUTE_URI Type欄位是URI資料 TNF_EMPTY Android系統會以 ACTION_TECH_DISCOVERED的方式處理 TNF_EXTERNAL_TYPE Type欄位是URN 型態的URI,Android會將它的格式轉成vnd.android.nfc://ext/<domain_name>:<service_name> TNF_MIME_MEDIA Type欄位是描述MIME的型態 TNF_UNCHANGED TNF_UNKNOWN TNF_WELL_KNOWN Type欄位是RTD 7

Android處理NFC tag資料的方式 Type欄位的值(RTD) 說明 RTD_ALTERNATIVE_CARRIER Android系統會以 ACTION_TECH_DISCOVERED的方式處理 RTD_HANDOVER_CARRIER RTD_HANDOVER_REQUEST RTD_HANDOVER_SELECT RTD_SMART_POSTER Payload欄位是URI RTD_TEXT MIME型態是text/plain. RTD_URI 8

Android處理NFC tag資料的方式 當Android手機或平板電腦的螢幕被解鎖之後,Android系統便開始連續不斷地偵測NFC tag(使用者可以利用手機或平板電腦的系統設定取消這項功能)。 當偵測到NFC tag時,Android系統開始分析從NFC tag中取得的資料。首先利用TNF和Type二個欄位決定資料是否屬於MIME或是URI型態。如果是的話代表這個NFC tag是屬於NDEF,接著取出實際的資料,再將它包裝成一個ACTION_NDEF_DISCOVERED型態的Intent物件,然後搜尋目前安裝的程式,找出誰能夠處理這個Intent物件,然後啟動該程式把Intent物件交給它處理。 如果Android系統分析NFC tag的結果發現不是NDEF,便會建立一個ACTION_TECH_DISCOVERED型態的Intent物件,其中包含一個Tag物件和從NFC tag中取出的資料。 9

Android處理NFC tag資料的方式 例如NFC message中的第一個record的TNF是TNF_ABSOLUTE_URI,則表示Type欄位就是URI,此時Android會取出該URI連同Payload中的資料一起包裝成一個ACTION_NDEF_DISCOVERED型態的Intent物件。 如果NFC message的第一個record的TNF是TNF_UNKNOWN,則Android會建立一個ACTION_TECH_DISCOVERED型態的Intent物件。 當Android根據NFC tag中的資料建立好Intent物件後,便開始搜尋可以處理該Intent的程式,並根據下列步驟進行後續操作。 10

Android處理NFC tag資料的方式 步驟一: 如果是ACTION_NDEF_DISCOVERED型態的Intent而且有程式可以進行處理,就啟動該程式,然後把Intent傳給它,如果找不到可以處理的程式就進行下一個步驟。 步驟二: 重新建立一個ACTION_TECH_DISCOVERED型態的Intent,然後尋找可以處理它的程式。如果有找到就啟動該程式然後把Intent傳給它,如果找不到可以處理的程式就進行下一個步驟。 步驟三: 重新建立一個ACTION_TAG_DISCOVERED型態的Intent,然後尋找可以處理它的程式。如果有找到就啟動該程式然後把Intent傳給它,如果找不到可以處理的程式就放棄處理這個NFC tag的資料。 11

Android處理NFC tag資料的方式 12

開發NFC程式 要讓程式能夠處理NFC tag的資料必須先在程式功能描述檔AndroidManifest.xml中完成以下設定: <?xml version="1.0" encoding="utf-8"?> <manifest ...> ... <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <application ...> … </application> </manifest> 13

開發NFC程式 接下來是設定程式能夠處理的NFC Intent的形式,這其實是利用單元四十介紹的Intent Filter技術。例如要讓程式能夠處理ACTION_NDEF_DISCOVERED型態的Intent,而且資料是屬於MIME的text形式,就必須在程式功能描述檔中加入以下設定: <?xml version="1.0" encoding="utf-8"?> <manifest …> … <application …> <activity …> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" /> </intent-filter> </activity> </application> </manifest> 14

開發NFC程式 如果程式要處理的資料是屬於URI型態,而且內容是http://developer.android.com/index.html,就必須設定為: …(同前一個範例) <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="http" android:host="developer.android.com" android:pathPrefix="/index.html" /> </intent-filter> 15

開發NFC程式 如果要讓程式能夠處理ACTION_TECH_DISCOVERED型態的Intent,必須先在程式專案的res資料夾中新增一個xml子資料夾,並且在裡頭建立一個xml檔,例如可以將它取名為nfc_tech_list.xml,然後編輯它的內容如下: <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech>android.nfc.tech.NfcB</tech> </resources> 這個檔案定義程式能夠處理的NFC tag形式,以這個範例而言表示程式能夠處理NfcA搭配Ndef的形式,或者是NfcB搭配Ndef的形式。 16

開發NFC程式 然後在程式功能描述檔中加入下列設定: <?xml version="1.0" encoding="utf-8"?> <manifest …> … <application …> <activity> ... <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED"/> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_list" /> </activity> </application> </manifest> 17

開發NFC程式 程式收到NFC Intent之後必須從中取出資料,一般來說資料會以下列二種方式儲存在Intent中: 1. EXTRA_TAG 表示是一個Tag型態的物件。 2. EXTRA_NDEF_MESSAGES 表示這是NDEF型態的資料。 18

開發NFC程式 以下程式碼範例先檢查接收到的NFC Intent是否為ACTION_NDEF_DISCOVERED型態,如果是的話再從中取出EXTRA_NDEF_MESSAGES形式的資料: public void onResume() { super.onResume(); ... if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } //處理msgs[]陣列中的資料 … 19