import java.io.UnsupportedEncodingException;
import android.app.Activity;
import android.nfc.NdefMessage;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.TextView;
public class MainActivity extends Activity {
NfcAdapter nfcAdapter;
TextView promt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
promt = (TextView) findViewById(R.id.promt);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
promt.setText("This device doesn't support NFC!");
return;
}
if (!nfcAdapter.isEnabled()) {
promt.setText("Please you start NFC function on this device!");
return;
}
}
@Override
protected void onResume() {
super.onResume();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())
|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())) {
byte[] bytesId = getIntent().getByteArrayExtra(NfcAdapter.EXTRA_ID);
String id = bytesToHexString(bytesId);
String result2 = "";
String languageCode = "";
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs;
if (rawMsgs != null && rawMsgs.length > 0) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
byte[] payload = msgs[i].getRecords()[0].getPayload();
String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
int languageCodeLength = payload[0] & 0077;
System.out.println("languageCodeLength == " + languageCodeLength);
try {
languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
result2 = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
System.out.println();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
promt.setText(id + ", " + result2 + "(" + languageCode + ")");
}
}
private String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
char[] buffer = new char[2];
for (int i = 0; i < src.length; i++) {
buffer[1] = Character.forDigit((src[i] >>> 4) & 0x0F, 16);
buffer[0] = Character.forDigit(src[i] & 0x0F, 16);
stringBuilder.append(buffer);
}
return stringBuilder.reverse().toString().toUpperCase();
}
}