雖然網路上範例已經多到快淹出來了
但之後還是可能會在拿來應用
所以特別在寫這一篇
特別是以下這三種標籤分類 :
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的三种相应模式
參考資料 : NFC学习
參考資料 : Android: How to read NFC tag with current app
參考資料 : Tag的三种相应模式
沒有留言:
張貼留言