NFC教學 哈哈哈哈哈!!.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

项目6 通用堆栈.
檔案處理.
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
广东省教育厅教研室 黄志红 ,     研究改进行动     反思促使成长 广东省教育厅教研室  黄志红 ,
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
第二章 JAVA语言基础.
類別與物件 Class & Object.
Android + NFC 建國科技大學 資管系 饒瑞佶 2017/3 v1.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
第10章 App微信分享的实现 倚动实验室.
第11章 Android GPS位置服务与地图编程
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
Google Data API Spreadsheet
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
程式設計實作.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Android + Service 建國科技大學 資管系 饒瑞佶.
類別(class) 類別class與物件object.
Java语言程序设计 第五部分 Java异常处理.
實驗十四:顯示與控制地圖.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
C#面向对象程序设计 $7 继承和多态性.
第8章 Service解析.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
异常及处理.
Part16 開發NFC程式 單元80 NFC程式設計 單元81 把資料寫入NFC tag 單元82 NFC的進階用法 2.
Java程序设计 第2章 基本数据类型及操作.
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
第10章 GPS位置服务与地图编程.
P2P聊天工具.
第一單元 建立java 程式.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
網路應用.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
Review 1~3.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
Android藍芽聊天室 SDK內的範例程式
新進教師科展研習 王文良 資訊科,中正高工.
資料表示方法 資料儲存單位.
硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系.
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第9章 BroadcastReceiver的使用
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
加速感測器 靜宜大學資管系 楊子青.
SQLite資料庫 靜宜大學資管系 楊子青.
第二章 Java基础语法 北京传智播客教育
Part 8 Broadcast Receiver、Service和App Widget
InputStreamReader Console Scanner
Presentation transcript:

NFC教學 哈哈哈哈哈!!

NFC簡介 支持NDEF NFC Data Exchange Format (NDEF) 格式為主,它支持devices之間或device與tag之間 互相交換小型資料,是屬於近距離的無線技術。 主要偵測到的三種格式 ACTION_NDEF_DISCOVERED ACTION_TECH_DISCOVERED ACTION_TAG_DISCOVERED 這次教學使用的是Mifare Tag 屬於ACTION_TECH_DISCOVERED

NFC所需設定(一) 給予權限 <uses-permission android:name="android.permission.NFC"/> 指定最低的SDK版本 <uses-sdk android:minSdkVersion="10"/> (Android 2.3.3 (API Level 10)才有支援完整的NFC功能) 指定程式必需具有NFC晶片 <uses-feature android:name="android.hardware.nfc" android:required="true" />

NFC所需設定(二) 讀取 ACTION_TECH_DISCOVERED 格式 如果要讀取 ACTION_TECH_DISCOVERED 格式,需要在專案中增加一個新的XML檔案,定義該應用程式支持的 tech-list sets。 <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" /> 這邊指定xml/nfc為需要讀取的檔案,所以我們要在專案中新增xml目錄並且在底下新增名為nfc的xml <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- capture anything using NfcF --> <tech-list> <tech>android.nfc.tech.IsoDep</tech> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.NfcV</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources>

偵測卡片(一) 讓應用程式的Activity負責處理所有接受到的NFC intents 宣告 PendingIntent mPendingIntent; MifareClassic mfc; Intent intent; NfcAdapter mAdapter; IntentFilter ndef; IntentFilter[] mFilters; String[][] mTechLists; String tag_id, tag_msg, tag_data; 讓Activity負責處理所有接收到的NFC Intents。 mAdapter = NfcAdapter.getDefaultAdapter(this); mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); //new.... 指定該Activity為應用程式中的最上層Activity↑ ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } mFilters = new IntentFilter[]{ndef,}; mTechLists = new String[][]{new String[]{MifareClassic.class.getName()}};

偵測卡片(二) 處理由系統送來的intent @Override public void onNewIntent(Intent intent) { msg.setText("NFC有反應喔喔"); } protected void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);

Mifare TAG 簡介 分為16個磁區,每個磁區為4塊,每塊16個位元組,以塊 為存取單位。 每個磁區有獨立的一組密碼及訪問控制。 分為16個磁區,每個磁區為4塊,每塊16個位元組,以塊 為存取單位。 每個磁區有獨立的一組密碼及訪問控制。 每張卡有唯一序列號,為32位。

Mifare TAG讀取表頭 在onNewIntent底下新增 String action = intent.getAction(); if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); mfc = MifareClassic.get(tagFromIntent); boolean auth = false; tag_data = ""; try{ mfc.connect(); tagFromIntent = mfc.getTag(); auth = mfc.authenticateSectorWithKeyA(0, MifareClassic.KEY_DEFAULT); if (!auth) tag_data = "無法讀取"; tag_id = output(tagFromIntent.getId()); msg.setText("TagId:" + tag_id); } catch (IOException e) { msg.setText("No Get Tech: \n" + e); else msg.setText("本程式不支援此種類卡");

處理Byte public String output(byte[] data){ String out=""; for(int i=0;i<data.length;i++) out = out +data[i]; return out; }

Mifare TAG 讀取Block tag_data = new String(mfc.readBlock(1), Charset.forName("UTF-8")); msg.setText("TagId:" + tag_id + "\n Block:" + tag_data);

Mifare TAG 寫入Block 宣告int nfc_s = 0; 控制寫入或讀取 做兩個按鈕控制nfc_s變數(0為讀取,1為寫入) 寫入程式碼 if (!auth) tag_data = "無法寫入"; else{ byte[] value = getmsg.getText().toString().trim().getBytes("UTF-8"); byte[] toWrite = new byte[MifareClassic.BLOCK_SIZE]; for (int i = 0; i < MifareClassic.BLOCK_SIZE; i++) { if (i < value.length) toWrite[i] = value[i]; else toWrite[i] = 0; } mfc.writeBlock(1, toWrite); mfc.close(); msg.setText("寫進去囉!!嘿嘿");