2016年6月21日 星期二

Android-Read RFID Tag Id

尚未整理
雖然網路上範例已經多到快淹出來了
但之後還是可能會在拿來應用
所以特別在寫這一篇

特別是以下這三種標籤分類 :

1 . NEEF_DISCOVERED : 必須可以利用 NDEF 格式傳輸的 Tag ,
例 : 文字。

2 . TECH_DISCOVERED : Tag 必須符合設定的規範才被觸發
例 :
<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.MifareClassic</tech>
    <tech>android.nfc.tech.Ndef</tech>
</tech-list>

3 . TAG_DISCOVERED : 只要是 Tag 即可被處發。

相信您對以下這張圖不陌生吧... ( 只要找 NFC 相關都會有此圖












簡短說明 : 此圖內容說明有關優先權( 綠框由 上_高 到 下_低 )NDEF > TECH > TAG
,如果 Tag 非 NDEF,那就會在判斷是否為 TECH 內的,如果還是沒有,則直接由
 TAG 傳到 Activity。


1 . 開啟對應權限
<uses-permission android:name="android.permission.NFC" />

<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />

2 . 最小版本限制
<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="21" />

3 . 條件


4 . 在 Actvitiy OnCreate 判斷 NFC 是否支援、使否開啟
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity {  

    private TextView textNFC;
    private NfcAdapter nfcAdapter;
    private PendingIntent mPendingIntent;

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        textNFC = (TextView) findViewById(R.id.textNFC); 
        
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);   
        if (nfcAdapter == null) {
            //nfc not support your device.
            return;
        }
        mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
                getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    }  

    @Override  
    protected void onResume() {  
        super.onResume();  
        
        nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
        
    }  

    @Override  
    protected void onPause() {  
        super.onPause();  
        
        if (nfcAdapter != null) {
            nfcAdapter.disableForegroundDispatch(this);
        }
    }  

    @Override  
    protected void onNewIntent(Intent intent) {  
        if (intent.getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {  
            Log.d("NFCTest", "Tag Id : " + ByteArrayToHexString(intent  
                    .getByteArrayExtra(NfcAdapter.EXTRA_ID)));
        }  
    } 
 
    private String ByteArrayToHexString(byte[] inarray) {  
        int i, j, in;  
        String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",  
                "B", "C", "D", "E", "F" };  
        String out = "";  
        for (j = 0; j < inarray.length; ++j) {  
            in = (int) inarray[j] & 0xff;  
            i = (in >> 4) & 0x0f;  
            out += hex[i];  
            i = in & 0x0f;  
            out += hex[i];  
        }  
        return out;  
    }  

}   


參考資料 : Android NFC tag 近距離無線通訊
參考資料 : Android developer_NFC
參考資料 : NFC学习
參考資料 : Android: How to read NFC tag with current app
參考資料 : Tag的三种相应模式

2016年6月19日 星期日

Android-What's NFC?

How get nfc tag id for Rfid card?

NFC ( Near Field Communication ) : 近場通訊。

還是不懂 ? ( 當然...,因為還沒解釋。
不要一頭栽下去 !!!
不要一頭栽下去 !!!
不要一頭栽下去 !!!
只需要大概了解運作原理

我們以簡單大賣場為例( 簡單說明 NFC ) :
但必須要先了解有兩大個角色
1 . RFID 
( 化妝品、衣物、價值較高的物品都會有 )
( 悠遊卡、磁扣、門禁卡都會有 )














2 . RFID 感應器 ( 請自行 Google 圖片 RFID 感應器,因會有版權問題 )























( 請原諒筆者的美術天分 )

---------------------------------------------------

請回答以下問題 ( 想引導讀者快速進入,如有需改進的地方
,請提出,筆者會立即更改 ) :

1 . 在日本用什麼語言跟人互相溝通 ?
Ans : 日語 。

2 . 在美國用什麼語言跟人互相溝通 ?
Ans : 美語 。

3 . 在英國用什麼語言跟人互相溝通 ?
Ans : 英語 。

4 . 在RFID世界用什麼傳輸跟機器互相交換資料 ?
Ans : NFC















1 . RFID Card 內有 IC 晶片,可仔細看第一張圖
2 . Scaner 可感應 RFID 內的 IC 晶片序號
3 . 感應到序號後,交由電腦清除庫號( 使用者預設的動作 ),
以免離開收銀台被,逼逼叫! 逼逼叫! 逼逼叫!
4 . 以此範例,RFID IC 只是代表一個唯一的 ID
--------------------------------------------------------

注意 :
NFC有分頻率 OTZ
這就是為甚麼最前面第一點又有分類的原因
別想太複雜
就很像是在台灣雖然都是講國語
但也有閩南語、客家話...等















( 轉貼 : RFID技術重要參數 )

參考資料 : RFID技術重要參數
參考資料 : RFID標準發展現況
參考資料 : 無線射頻辨識_wiki

歡迎轉載,請註明出處。

2016年6月16日 星期四

Servlet-什麼是 Tomcat?

1 . 什麼是 Tomcat :
是 Apache 底下的專案,提供有關 Web 伺服器的管理與功能

2 . 為什麼 Tomcat 和 Servlet 有關係?
通常若只存在 Servlet ,只算是空殼,他必須要有伺服器配合
,他能發揮他的價值。


現在可以想像,您要開一家超商,裡面有店員、商品...等。
但這只是想像 !
但這只是想像 !
但這只是想像 !

尚未實作 !
尚未實作 !
尚未實作 !




















如果要實現這些,就必須要被執行
這就需要 Tomcat 來去實現

歡迎轉載,請註明出處。

下一篇 : Servlet-什麼是 Servlet?( 一 )

2016年6月15日 星期三

Servlet-什麼是 Servlet?( 二 )

上一篇 : Servlet-什麼是 Servlet?( 一 )

上一篇我們用我們生活周遭的例子在說明
這篇我們用比較正式( 嗑! 嗑! 嗑!

那我們再請上一篇的圖,再加工一下 :


















差異 : 
1 . 請求改用網址
2 . 回應改用網址或參數
3 . 使用 Tomcat 架設指定商家 ( 環境 )

再重新複習一下角色 :
1 . Browser
2 . Servler ( 此角色必須要有環境才能存活_Tomcat )


歡迎轉載,請註明出處。

Servlet-什麼是 Servlet?( 一 )

Servlet : 寫在伺服器端的程序,最主要交換式瀏覽修改數據

我相信說到這裡也是一堆人充滿著問號........( OTZ

我們先假設一個情境吧
比如現在小明在 7-11


















我們所設置的 Servlet 就比較像是店員的角色

小明對指定的位置發出請求,店員就會相對的回應
Browser 對指定的位置發出請求,Servlet 就會相對的回應

簡單的說,有問就有答。
就目前先休息一下吧 !!!

歡迎轉載,請註明出處。

下一篇 : Servlet-什麼是 Servlet?( 二 )

2016年6月13日 星期一

Server-如何在 Tomcat 執行 Web 專案

更新日誌 :
20160704 If eclipse preferences has not server ?
A : Eclipse / Help / Install new software /http://download.eclipse.org/releases/kepler/
and check Web, XML, Java EE and OSGi Enterprise Development

此篇
1 . 如何創立 Web 專案
2 . 如何把專案執行到 Tomcat 上


1 . 創立 Web 專案 ( Dynamic Web Project )

 2 . 專案架構















3 . 新增 Jsp 網路頁面














4 . 在指定檔案夾下生成檔案














5 . 因為頁面只有 Title ,看不出結果
     我們在 Body 層內輸入任意文字

-----------------------
網頁已經好了,要如何執行在 Server 上哩??
6 . 開始專案,並且執行在 Server 上














7 . 出現 404錯誤!?
















參考資料 : [程式筆記]myEclipse10教學 - 架設tomcat與第1個網頁
參考資料 : Java Web架站 (J1.0) Tomcat Apache Eclipse 設定
參考資料 : Servlet 第一個Hello World
參考資料 : Java Servlet 3.0 裡的 @WebServlet
參考資料 : Java Tutorial 第三堂(3)使用 Servlet、JSP 開發 Web 應用程式

參考資料 : Jsp-Servlet Annotations Hello World Example Project in Eclipse


歡迎轉載,請註明出處。

Server-如何在 Eclipse 建立 Tomcat 伺服器

How build server by tomcat ?

如果我們想在自己家中或任意點架設簡易伺服器要怎辦?
只需要以下的步驟就可以輕鬆完成囉

PS: 請確認 JDK 是否安裝( 設置 )完畢:


1 . 下載 Tomcat  : Apache Tomcat














2 . 選擇自己的作業系統版本下載
     解壓縮至自己規範的路徑下














3 . 設定 Eclipse 的 Server 環境,並且選擇對應版本。


















4 . 將路徑寫至對應表格內














5 . 完成設定














6. 設定 Toolbar ( Server )
PS: 如果視窗沒有的話,請 Windows>See View>Other>Server 



















7. 開啟伺服器


8. 啟動完成紀錄







參考資料 : Java Web架站 (J1.0) Tomcat Apache Eclipse 設定
參考資料 : Servlet 教程

歡迎轉載,請註明出處。

2016年6月9日 星期四

Android-FireBase Realtime Database 前置

20161109 此篇程式碼已經不適用,但是開發平台可參考

How to build the FireBase DateBase?
今天我們來介紹 FireBase 的 DateBase 功能
為什麼要用 FireBase 的??
1 . 幫開發者快速建置的一個平台
2 . 快速開發程式,開發者要用的 API 包裝 SDK
3 . 可收集分析數據...等。


話不多說,我們就先開始吧~

1 . 首先登入 FireBase 開發平台 : FireBase














2 . 建立 " 新專案 "














3 . 建立完後會出現管理畫面














4 . 在專案 build.gradle 內新增
android {
    .
    .
    .
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
}
dependencies {
    .
    .
    compile 'com.firebase:firebase-client-android:2.5.2+'
    .
}

5 . 新增權限
<uses-permission android:name="android.permission.INTERNET" />

6 . 複製資料庫網址














7 . 將連結位置貼於指定位子,SDK 自動完成連線讀/寫














123
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    private Firebase myFirebaseRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Firebase.setAndroidContext(this);
        myFirebaseRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
        myFirebaseRef.child("message").setValue("Do you have data? You'll love Firebase.");
        myFirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                System.out.println(snapshot.getValue());  //prints "Do you have data? You'll love Firebase."
            }
            @Override public void onCancelled(FirebaseError error) { }
        });

    }
}

 8 . Start Application, But has error !














9 . We need modify rules














10 . Start application again. The datebase has data.















參考資料 : Android Quickstart

歡迎轉載,請註明出處。

2016年6月6日 星期一

JavaSwing-Java UI 設計( 四 )_ LayoutManager



歡迎轉載,請註明出處。

JavaSwing-Java UI 設計( 三 )_Hello Swing

上一篇我們提到如何開啟 GUI 視窗
接下來要如何使用?
因為有層次的關係,此篇以 JFrame 為底,
有機會再介紹層次

1 . 單點 JPanel 元件














2. 擺放至 JFrame 中央














3 . 元件樹狀結構圖會新增一筆剛剛的資料














4 . 切換回 Source 模式














5 . 剛剛生成的資料被新增在程式內














6 . 新增檔案標題、視窗長寬、是否顯示視窗

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;

public class ThirdPager {

    private JFrame jFrame;
    
    ThirdPager() {
        // Title
        jFrame = new JFrame("Hello Swing");
        // Size
        jFrame.setSize(new Dimension(400, 400));
        // layoutManager
        jFrame.getContentPane().setLayout(new BorderLayout(0, 0));
        // Visible
        jFrame.setVisible(true);
    }
    
    public static void main(String[] args) {
        ThirdPager third = new ThirdPager();
    }

}


歡迎轉載,請註明出處。

JavaSwing-Java UI 設計( 二 )_怎開啟 GUI 介面?

我們在上一篇有提到 : JavaSwing-Java UI 設計( 一 )_安裝 WindowBuilder

這篇很簡短的說明可能會遇到的狀況

必須要在 Class 新增有關 Swing 的元件
不然可能會發生以下問題 :
1 . 沒添加元件














2 . 有添加元件














歡迎轉載,請著名出處。

2016年6月3日 星期五

JavaSwing-Java UI 設計( 一 )_安裝 WindowBuilder

如果要開發 Java 圖形化介面
WindowBuilder 一定是不能錯過的工具

此工具好處 :
1 . 不用程式慢慢地
2 . 直拖曳元件到您想要的畫面位置

安裝步驟 :
1 . 查看 Eclipse 版本
2 . 到官方網站複製連結
1 . 檢查當前 Eclipse 版號














2 . 至官方網站取得對應下載連結














3 . 點擊連結後,複製此連結














4 . 將連結貼在新增軟體連結內,並且勾選下載














5 . 下一步














6 . 確認條件條款














7 . 安裝完,確認重新開啟 Eclipse














8 . 點選任何一個 Class 看工具列是否有 WindowBuilder Editor 選項
如果成功會出現此選項。















歡迎轉載,請註明出處。