Lesen Sie NTAG213, das mit einem Android-Gerät geschützt istAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Lesen Sie NTAG213, das mit einem Android-Gerät geschützt ist

Post by Anonymous »

Ich entwerfe eine Android-App zum Lesen geschützter ntag213-Tags. Ich bin der Besitzer des Tags.
Ich habe vor dem pwd geschrieben und mit einem Lesegerät richtig gepackt.
Ich kann es mit dem Samsung Young 2, Android-Version 4.4.2 lesen.
Wenn ich versuche, sie mit einem Samsung Galaxy SIII Neo Android 4.4 zu lesen, habe ich eine Ausnahme mit dem gleichen Code, der den PWD-Befehl sendet und die Antwort liest.
Wenn ich einige Apps dazu verwende Lesen Sie diesen Tag, da TagInfo oder NFCTools mit Samsung Galaxy SIII Neo der Tag als ntag203 erkannt wird. Mit dem Samsung Young Galaxy 2 habe ich dieses Problem nicht, die App erkennt es ok.
Was passiert? Was ist los?
Ich habe es mit OnePlus One Mobile getestet und es funktioniert nicht. Ich habe auch eine Leseausnahme.
Hier ist die Ausnahmemeldung und der Stapel:

Code: Select all

java.io.IOException:  Transceive failed
und der Stacktrace:

Code: Select all

 {java.lang.StackTraceElement[18]@830038119016}
0 = {java.lang.StackTraceElement@830038119112} "android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52)"
1 = {java.lang.StackTraceElement@830038119440} "android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)"
2 = {java.lang.StackTraceElement@830038119776} "android.nfc.tech.NfcA.transceive(NfcA.java:120)"
3 = {java.lang.StackTraceElement@830038120048} "com.appname.MainActivity.onNewIntent(MainActivity.java:259)"
4 = {java.lang.StackTraceElement@830038120360} "android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1167)"
5 = {java.lang.StackTraceElement@830038061384} "android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2455)"
6 = {java.lang.StackTraceElement@830038061704} "android.app.ActivityThread.performNewIntents(ActivityThread.java:2468)"
7 = {java.lang.StackTraceElement@830038062024} "android.app.ActivityThread.handleNewIntent(ActivityThread.java:2477)"
8 = {java.lang.StackTraceElement@830038062344} "android.app.ActivityThread.access$1700(ActivityThread.java:169)"
9 = {java.lang.StackTraceElement@830038062608} "android.app.ActivityThread$H.handleMessage(ActivityThread.java:1348)"
10 = {java.lang.StackTraceElement@830038062928} "android.os.Handler.dispatchMessage(Handler.java:102)"
11 = {java.lang.StackTraceElement@830038063216} "android.os.Looper.loop(Looper.java:136)"
12 = {java.lang.StackTraceElement@830038063480} "android.app.ActivityThread.main(ActivityThread.java:5476)"
13 = {java.lang.StackTraceElement@830038063776} "java.lang.reflect.Method.invokeNative(Native Method)"
14 = {java.lang.StackTraceElement@830038064072} "java.lang.reflect.Method.invoke(Method.java:515)"
15 = {java.lang.StackTraceElement@830038064352} "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)"
16 = {java.lang.StackTraceElement@830038064696} "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)"
17 = {java.lang.StackTraceElement@830046325096} "dalvik.system.NativeStart.main(Native Method)"
Und der Code:

Code: Select all

public class MainActivity extends Activity {

private static final String TAG = "appname MainActivity";
byte[] pwd_NTAG213 = new byte[]{(byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01};
byte[] pack_NTAG213 = new byte[]{(byte) 0x01, (byte) 0x01};

private NfcAdapter mNfcAdapter;
PendingIntent pendingIntent;
byte[] UID = new byte[8];
byte[][] Buf = new byte[3][16];
byte [] DeviceUID =new byte[16];

public static MainActivity myActivity;
static boolean isActive = false;
static boolean scanTag =false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(layout.activity_main);

myActivity =this;
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter == null) {
// Stop here, we definitely need NFC
Toast.makeText(this, "No NFC", Toast.LENGTH_LONG).show();
finish();
return;
}

if (!mNfcAdapter.isEnabled()) {
askUserToOpenNFC();
return;
}

Intent intent = new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

}
@Override
public void onStart() {
super.onStart();
isActive = true;
}

@Override
public void onStop() {
super.onStop();
isActive = false;
}

@Override
public void onResume(){
super.onResume();
WriteModeOn();
}

public void onPause(){
super.onPause();
WriteModeOff();
}

@SuppressLint("NewApi") private void WriteModeOn(){
final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent,  0);

String[][] techList = new String[1][1];
techList[0][0] = "android.nfc.tech.NfcA";

IntentFilter[] filters = new IntentFilter[2];
filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
filters[1] = new IntentFilter();
filters[1].addAction(NfcAdapter.ACTION_TAG_DISCOVERED);
filters[1].addCategory(Intent.CATEGORY_DEFAULT);
if (mNfcAdapter != null) {
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, filters, techList);
}
}

@SuppressLint("NewApi") private void WriteModeOff(){
mNfcAdapter.disableForegroundDispatch(this);
}
@SuppressLint("NewApi") protected void onNewIntent(Intent intent){
NfcA nfca;
String action = intent.getAction();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

String device_unique_id =     Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);

Toast toast = new Toast(getApplicationContext());
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(id.lytLayout));
TextView txtMsg = (TextView)layout.findViewById(id.txtMensaje);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);

if (!scanTag)
return ;
scanTag = false;

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)){
nfca = NfcA.get(tag);
UID = tag.getId();
try {
nfca.connect();
if (!nfca.isConnected()) {
return;
}
//··················································································PassWord +PACK
Log.i(TAG, "NTaG213: Password + PACK");

byte[] BufTmp = new byte[16];
BufTmp = nfca.transceive(new byte[]{(byte) 0x1B,pwd_NTAG213[0],pwd_NTAG213[1], pwd_NTAG213[2], pwd_NTAG213[3]}); /*

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post