Witam serdecznie
Przeglądając dokumentację:
https://developer.android.com/reference/android/nfc/tech/MifareUltralight
natknąłem się na metodętransceive(byte[] data), ale nie mam pomysłu jak jej użyć.
Przy zapisie robię tak:
try {
ultralight.connect();
ultralight.writePage(0x04, tablica_bajtow);
ultralight.close();
} catch (IOException e) {
e.printStackTrace();
}
Przy odczycie w ten sposób:
try {
ultralight.connect();
mojatablica16elementowa = ultralight.readPages(2);
ultralight.close();
} catch (IOException e) {
e.printStackTrace();
}
Z dokumentacji wynika, że: "Send raw NfcA data to a tag and receive the response." czyli wysyłam tablicę 4 bajtów i czekam na odpowiedź, ale czy tę odpowiedź muszę odebrać przy pomocy metody read?
try {
ultralight.connect();
byte [] result = ultralight.transceive(bajty [] obszar_pamięci);
ultralight.close();
} catch (IOException e) {
e.printStackTrace();
}
zasadniczo to nie wiem jak jest zorganizowanyodbiór potwierdzenia w dokumentacji mało jest o tej metodzie.
Proszę o poradę
dodana zawartość
Wgłębiłem się trochę w temat i przygotowałem taki oto kod:
package com.example.ultralighttranscieve;
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareUltralight;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private NfcAdapter nfcAdapter;
PendingIntent mPendingIntent;
byte[] tablica_zapis = new byte [4];
byte[] tablica_potwierdzenie = new byte [4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tablica_zapis[0]=10;
tablica_zapis[1]=11;
tablica_zapis[2]=12;
tablica_zapis[3]=13;
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
Log.d("intencje", "onCreate");
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, "Urządzenie nie wspiera NFC", Toast.LENGTH_LONG).show();
finish();
} else if (!nfcAdapter.isEnabled()) {
Toast.makeText(this, "NFC wyłączone, włącz NFC", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onResume() {
super.onResume();
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
}
@Override
protected void onPause() {
super.onPause();
nfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent){
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareUltralight ultralight = MifareUltralight.get(tag);
tablica_zapis[0]=10;
tablica_zapis[1]=10;
tablica_zapis[2]=10;
tablica_zapis[3]=10;
try {
ultralight.connect();
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x09,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0A,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0B,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0C,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0D,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0E,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
tablica_potwierdzenie=ultralight.transceive(new byte[]
{(byte) 0xA2, 0x0F,
tablica_zapis[0],
tablica_zapis[1],
tablica_zapis[2],
tablica_zapis[3],
});
Log.d("Potwierdzenie",""+tablica_potwierdzenie[0]);
ultralight.close();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(this, "Dane zapisano", Toast.LENGTH_SHORT).show();
}
}
Za każdym razem otrzymuje potwierdzenie o wartości 10 co jest z tego co wyczytałem oznaką, że dane się zapisały poprawnie. Czyli o to chodziło ?