6
Próbuję utworzyć aplikację przy użyciu NFC i chcę tylko spróbować odczytać tag NFC i pobrać wiadomość tekstową z tagu i umieścić go w widoku TextView. Mam już kod, ale nic się nie dzieje, gdy próbuję sparować telefon z tagiem NFC.Odczytywanie wiadomości NDEF z tagu NFC z aplikacji Android
Oto mój kod i może ktoś proszę spojrzeć na niego i zobaczyć, co robię źle i co należy zrobić, aby rozwiązać ten problem, proszę:
Button measurementsDataButton;
NfcAdapter myNfcAdapter;
PendingIntent myPendingIntent;
IntentFilter ndef;
IntentFilter[] filters;
String[][] techLists;
int mCount;
TextView mText;
String payload;
byte payloadHeader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc_scanner);
final ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
mText = (TextView) findViewById(R.id.flowTextView1);
measurementsDataButton = (Button) findViewById(R.id.measurementsButton1);
measurementsDataButton.setOnClickListener(this);
myNfcAdapter = NfcAdapter.getDefaultAdapter(this);
myPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
filters = new IntentFilter[] {ndef, };
techLists = new String[][] {new String[] {Ndef.class.getName()}, new String[] {NdefFormatable.class.getName()}};
}
@Override
public void onPause() {
super.onPause();
myNfcAdapter.disableForegroundDispatch(this);
}
@Override
public void onResume() {
super.onResume();
if(myNfcAdapter != null) {
myNfcAdapter.enableForegroundDispatch(this, myPendingIntent, filters, techLists);
}
}
@Override
public void onNewIntent(Intent intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent()))
{
NdefMessage [] messages = getNdefMessages(getIntent());
for(int i = 0; i<messages.length; i++)
{
for(int j = 0; j<messages[0].getRecords().length; j++)
{
NdefRecord record = messages[i].getRecords()[j];
payload = new String(record.getPayload(), 1, record.getPayload().length-1, Charset.forName("UTF-8"));
mText.setText(payload);
payloadHeader = record.getPayload()[0];
}
}
}
}
NdefMessage[] getNdefMessages(Intent intent) {
// TODO Auto-generated method stub
NdefMessage[] message = null;
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if(rawMessages != null) {
message = new NdefMessage[rawMessages.length];
for(int i = 0; i < rawMessages.length; i++) {
message[i] = (NdefMessage) rawMessages[i];
}
}
else {
byte[] empty = new byte[] {};
NdefRecord record = new NdefRecord (NdefRecord.TNF_UNKNOWN, empty, empty, empty);
NdefMessage msg = new NdefMessage (new NdefRecord[] {record});
message = new NdefMessage[] {msg};
}
}
else {
Log.d("", "Unknown intent.");
finish();
}
return message;
}
ja już [poradnik] (http://mobile.tutsplus.com/tutorials/android/reading-nfc-tags-with-android/) na przykładzie applicaton. To powinno ci pomóc. – vRallev
Dziękuję bardzo! Poszedłem za twoim tutorialem i wszystko działało dobrze. –