Я работаю над приложением для Android, которое может читать и писать на теге NFC. У меня нет проблем с чтением тега, который я уже что-то написал, но когда я использую пустой тег, у меня возникают трудности с чтением UID тега в HEX-коде.Android NFC java.io.IOException: Transceive failed
Я использую классические теги mifare, и я читаю UID непосредственно в шестнадцатеричном формате с помощью метода readblock. Странно, что он отлично работает в режиме отладчика, где я получаю UID. Но когда я пытаюсь без debbuger я получаю следующее исключение:
java.io.IOException: Transceive failed
Вот мой метод для чтения в тег:
static String getUID(Intent intent) {
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareClassic mc = MifareClassic.get(tagFromIntent);
try {
mc.connect();
Log.i("connect", "ok");
} catch (IOException e) {
// TODO Auto-generated catch block
Log.i("connect", "nok");
e.printStackTrace();
}
try {
boolean secA = mc.authenticateSectorWithKeyA(0, mc.KEY_DEFAULT);
Log.i("secA", "ok");
} catch (IOException e) {
Log.i("secA", "nok");
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
boolean secB = mc.authenticateSectorWithKeyB(0, mc.KEY_DEFAULT);
Log.i("secB", "ok");
} catch (IOException e) {
Log.i("secB", "nok");
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] uidBytes = null;
try {
uidBytes = mc.readBlock(0);
Log.i("bytes", "ok");
} catch (IOException e) {
Log.i("bytes", "nok");
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mc.close();
Log.i("close", "ok");
} catch (IOException e) {
Log.i("close", "nok");
// TODO Auto-generated catch block
e.printStackTrace();
}
if (uidBytes != null) {
String uid = HexToString(uidBytes);
return uid;
}
else { return "Repasser le tag";}
}
Я понятия не имею, как это исправить, так как он работает в отладке Режим.
Как насчет использования метода 'Log.d()' для выяснения различий между отладкой и запуском? Кроме того, вы можете показать декларацию 'AndroidManifest.xml' вашего трансляционного транслятора? – tolgap