Android สอบถามเรื่อง NFC การอ่าน Tag ครับ อยากให้ผลลัพธืที่แสดงออกมาเป็นแค่ข้อความใน tag
สวัสดีครับ ผมมือใหม่ครับ คือตอนนี้ผมกำลังศึกษาเรื่อง nfc อยู่ครับ ตอนนี้ติดปัญหาที่ไม่เข้าใจอยู่อ่ะครับ อยากจะให้ช่วยเหลือ
พอดีผมได้ศึกษาโค๊ดจากเว็ปนี้อยู่ครับ http://www.developer.com/ws/android/nfc-programming-in-android.html
เรื่องการอ่าน Tag อ่ะครับ ผลลัพธ์ที่ออกมาจากตัวอย่างนี้คือ
คำถามที่ 1 : ผมต้องการผลลัพธืออกมาเป็นเพียงข้อความใน tag ในรูปข้อความใน tag คือ First sample NDEF text record
ผมต้องแก้ไข code ตรงส่วนไหนยังไงครับเพื่อให้ผลลัพธ์ออกมาแค่เพียงข้อความ
คำถามที่ 2 : ขอคำแนะนำครับ ถ้าผลลัพธ์ออกมาแล้ว และผมต้องการผลลัพธ์ตัวนี้ไปดึงข้อมูลจากใน database ออกมาแสดง
อีกทีนึง จะต้องทำยังไงครับ
ขอบคุณครับ
ส่วนนี้คือ code ครับ
Code (Android-Java)
public class TagDispatch extends Activity {
private TextView mTextView;
private NfcAdapter mNfcAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mIntentFilters;
private String[][] mNFCTechLists;
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.tv);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter != null) {
mTextView.setText("Read an NFC tag");
} else {
mTextView.setText("This phone is not NFC enabled.");
}
// create an intent with tag data and deliver to this activity
mPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// set an intent filter for all MIME data
IntentFilter ndefIntent = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndefIntent.addDataType("*/*");
mIntentFilters = new IntentFilter[] { ndefIntent };
} catch (Exception e) {
Log.e("TagDispatch", e.toString());
}
mNFCTechLists = new String[][] { new String[] { NfcF.class.getName() } };
}
@Override
public void onNewIntent(Intent intent) {
String action = intent.getAction();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String s = action + "\n\n" + tag.toString();
// parse through all NDEF messages and their records and pick text type only
Parcelable[] data = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (data != null) {
try {
for (int i = 0; i < data.length; i++) {
NdefRecord [] recs = ((NdefMessage)data).getRecords();
for (int j = 0; j < recs.length; j++) {
if (recs[j].getTnf() == NdefRecord.TNF_WELL_KNOWN &&
Arrays.equals(recs[j].getType(), NdefRecord.RTD_TEXT)) {
byte[] payload = recs[j].getPayload();
String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
int langCodeLen = payload[0] & 0077;
s += ("\n\nNdefMessage[" + i + "], NdefRecord[" + j + "]:\n\"" +
new String(payload, langCodeLen + 1, payload.length - langCodeLen - 1,
textEncoding) + "\"");
}
}
}
} catch (Exception e) {
Log.e("TagDispatch", e.toString());
}
}
mTextView.setText(s);
}
@Override
public void onResume() {
super.onResume();
if (mNfcAdapter != null)
mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mIntentFilters, mNFCTechLists);
}
@Override
public void onPause() {
super.onPause();
if (mNfcAdapter != null)
mNfcAdapter.disableForegroundDispatch(this);
}
}
Tag : Mobile, Android
Date :
2014-08-29 00:17:19
By :
pputt
View :
1620
Reply :
1
ตัด for loop แล้วเปลี่ยนเป็น recs[0] แทน recs[j]
หรือ
substring ก่อน setText ให้กับ mTextView
Date :
2020-05-27 19:23:48
By :
PhrayaDev
Load balance : Server 00