NDEF makeReadOnly() wirft IOException

  • Antworten:6
Henner
  • Forum-Beiträge: 4

10.06.2015, 10:39:02 via Website

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 (wie unten im Beispiel) 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:

                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();
                }
            }

Und das dazugehörige Logcat so:

06-10 10:34:50.117    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ makeReadOnly is possible
06-10 10:34:50.117    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ Tag isWritable
06-10 10:34:50.851    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ java.io.IOException: Tag is not ndef
06-10 10:34:50.859    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.nfc.tech.Ndef.makeReadOnly(Ndef.java:403)
06-10 10:34:50.859    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at net.bits_bremen.bruenjes.gleisteinwriter.myThread.doInBackground(myThread.java:34)
06-10 10:34:50.867    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-10 10:34:50.890    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-10 10:34:50.890    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-10 10:34:50.898    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-10 10:34:50.914    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-10 10:34:50.921    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
06-10 10:34:50.921    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ java.io.IOException: Tag is not ndef
06-10 10:34:50.968    2671-4160/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ Tag closed

Ich bin dankbar für jeden Lösungsvorschlag oder auch für Alternativen, um das Tag zu versiegeln.

— geändert am 10.06.2015, 10:41:43

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.959

10.06.2015, 10:51:51 via App

Hallo Henner Brünjes,

herzlich willkommen hier im Forum (*)

das klingt nach, dass der Tag bzw die Zeichen noch ndef formatiert sind. Hatte nur mal schnell bei Google geschaut, aber vielleicht hilft dir das schon weiter.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Henner
  • Forum-Beiträge: 4

10.06.2015, 11:21:20 via Website

Hallo Ludy,

vielen Dank für die schnelle Antwort! :D

Die Tags sind ndef formatiert und konnten auch mit writeNdefMessage() beschrieben werden. Das müsste doch auch so korrekt sein oder meinst Du vielleicht, dass der Tag noch "nicht" ndef formatiert ist? Was meinst Du mit den "Zeichen"?

Die Message "Tag is not ndef" kommt auch nur selten, meistens ist die Message der Exception einfach null.

Gruß

Henner

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.959

10.06.2015, 11:33:59 via App

Hallo,

ich kann mir nicht vorstellen das die error msg null ist. Wie gesagt ich hatte nur bei Google geschaut, das beschreiben und lesen von Tags ich nicht mein Fachgebiet. Sorry.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Henner
  • Forum-Beiträge: 4

10.06.2015, 11:48:31 via Website

Hallo,

darüber wundere ich mich auch. Die einzige Erklärung, die ich dafür habe ist, dass es eben keine eigentliche IOException ist, sondern dass sie nur als Default ausgelöst wurde (siehe android.googlesource.com (ich darf leider den kompletten Link noch nicht veröffentlichen)). Ich bin auch erst darauf gekommen, als ich mir die Message im Logcat anzeigen lassen wollte und dabei eine NullPointerException geworfen wurde. Als "Beweis" kommt hier noch ein Logcat ohne Message, aber mit demselben Code wie beim ersten erzeugt:

06-10 11:36:06.046  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ makeReadOnly is possible
06-10 11:36:06.046  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ Tag isWritable
06-10 11:36:06.078  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ java.io.IOException
06-10 11:36:06.093  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.nfc.tech.Ndef.makeReadOnly(Ndef.java:394)
06-10 11:36:06.093  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at net.bits_bremen.bruenjes.gleisteinwriter.myThread.doInBackground(myThread.java:34)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
06-10 11:36:06.101  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ java.io.IOException
06-10 11:36:06.117  12329-14368/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ Tag closed

Gruß

Henner

Antworten
Henner
  • Forum-Beiträge: 4

10.06.2015, 12:48:45 via Website

Hallo Ludy,

geschaut habe ich schon, aber leider nichts passendes gefunden.

Gruß

Henner

Antworten