Für eine App möchte ich ein Tag einmalig beschreiben und es anschließend mit einem dauerhaften Schreibschutz versehen. Dafür gedacht ist wohl die Methode makeReadOnly(), die bei mir aber leider jedes Mal eine IOExeption wirft. Die Message der Exception ist meistens null aber ab und zu auch "Tag is not ndef". Bislang habe ich folgendes unternommen:
- Geprüft, ob der Tag beschreibbar ist
- Den Tag tatsächlich beschrieben
- Mit canMakeReadOnly() geprüft, ob ich das Tag überhaupt mit einem Schreibschutz versehen kann
- Die Methode in einem eigenen Thread ausgeführt
- Ein Tag mit der App Tag-Writer mit einem Schreibschutz versehen, um auszuschließen, dass es an den Tags liegt
- Herausgefunden, dass IOException auch die Default-Exception der Methode ist, d. h. die Ursache könnte auch woanders liegen
Der entsprechende Code sieht so aus:
Code
try {
ndefTag.connect();
if(ndefTag.canMakeReadOnly()) {
Log.d("Schuetzen", "makeReadOnly is possible");
}
else {
Log.d("Schuetzen", "makeReadOnly is not possible");
}
if(ndefTag.isWritable())
{
Log.d("Schuetzen", "Tag isWritable");
}
ndefTag.makeReadOnly();
}
catch (IOException e) {
e.printStackTrace();
Log.d("myThread", e.toString());
}
finally {
// Close connection:
try {
ndefTag.close();
Log.d("myThread", "Tag closed");
}
catch (Exception e) {
e.printStackTrace();
}
}
Alles anzeigen
Und das dazugehörige Logcat so:
Code
06-10 12:34:38.234 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ makeReadOnly is possible
06-10 12:34:38.234 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ Tag isWritable
06-10 12:34:38.257 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ java.io.IOException
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.nfc.tech.Ndef.makeReadOnly(Ndef.java:394)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at net.bits_bremen.bruenjes.gleisteinwriter.myThread.doInBackground(myThread.java:34)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
06-10 12:34:38.265 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ java.io.IOException
06-10 12:34:38.273 30633-30706/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ Tag closed
Alles anzeigen
Ich bin dankbar für jeden Lösungsvorschlag oder auch für Alternativen, um das Tag zu versiegeln.