首先在權限上將minSdkVersion修改為10並加入
1.AndroidManifest.xml
2.layout的activity_main.xml需有一個TextView顯示
3.MainActivity.java
public class Inventory extends Activity {
/* NFC */
// list of NFC technologies detected:
private final String[][] techList = new String[][] { new String[] {
NfcA.class.getName(), NfcB.class.getName(), NfcF.class.getName(),
NfcV.class.getName(), IsoDep.class.getName(),
MifareClassic.class.getName(), MifareUltralight.class.getName(),
Ndef.class.getName() } };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inventory);
}
/* NFC */
@Override
protected void onResume() {
super.onResume();
// creating pending intent:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass())
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// creating intent receiver for NFC events:
IntentFilter filter = new IntentFilter();
filter.addAction(NfcAdapter.ACTION_TAG_DISCOVERED);
filter.addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
filter.addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
// enabling foreground dispatch for getting intent from NFC event:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.enableForegroundDispatch(this, pendingIntent,
new IntentFilter[] { filter }, this.techList);
}
@Override
protected void onPause() {
super.onPause();
// disabling foreground dispatch:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.disableForegroundDispatch(this);
}
//將tag到的ID顯示出來
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {
((TextView) findViewById(R.id.tag)).setText("Tag ID(16-14):"
+ ByteArrayToHexString(intent
.getByteArrayExtra(NfcAdapter.EXTRA_ID))
+ "\n Tag ID (16-8):"
+ getHex(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID))
+ "\n Tag ID (dec):"
+ getDec(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID))
+ "\n ID (reversed):"
+ getReversed(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)));
}
}
//16進位14碼
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;
}
//16進位8碼
private String getHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = bytes.length - 1; i >= 0; --i) {
int b = bytes[i] & 0xff;
if (b < 0x10)
sb.append('0');
sb.append(Integer.toHexString(b));
if (i > 0) {
sb.append(" ");
}
}
return sb.toString();
}
//12進位10碼
private long getDec(byte[] bytes) {
long result = 0;
long factor = 1;
for (int i = 0; i < bytes.length; ++i) {
long value = bytes[i] & 0xffl;
result += value * factor;
factor *= 256l;
}
return result;
}
//12進位10碼反轉
private long getReversed(byte[] bytes) {
long result = 0;
long factor = 1;
for (int i = bytes.length - 1; i >= 0; --i) {
long value = bytes[i] & 0xffl;
result += value * factor;
factor *= 256l;
}
return result;
}
}
參考連結https://gist.github.com/luixal/5768921
https://github.com/nadam/nfc-reader

沒有留言 :
張貼留言