Android makeReadOnly()引发IOException
对于Android应用程序,我想在NDEF标签上写一条消息,并确保消息之后不能更改。显而易见的解决方案是makeReadOnly()方法,但它总是抛出一个java.io.IOException,而不带消息(null)。 我已经尝试了以下方法:Android makeReadOnly()引发IOException,android,nfc,ndef,Android,Nfc,Ndef,对于Android应用程序,我想在NDEF标签上写一条消息,并确保消息之后不能更改。显而易见的解决方案是makeReadOnly()方法,但它总是抛出一个java.io.IOException,而不带消息(null)。 我已经尝试了以下方法: 检查标记是否可写 在标签上写了一条信息 如果理论上可以使标记为只读,请使用canMakeReadOnly()进行检查 在另一个线程中使用makeReadOnly,然后在主线程中使用 使用app tag Writer密封标签,以确保我使用的标签可以完全密封
- 检查标记是否可写
- 在标签上写了一条信息
- 如果理论上可以使标记为只读,请使用canMakeReadOnly()进行检查
- 在另一个线程中使用makeReadOnly,然后在主线程中使用
- 使用app tag Writer密封标签,以确保我使用的标签可以完全密封
- 发现IOException是这个方法的默认异常,因此可能错误与I/O()无关,但是那里的答案只是解释了异常不需要是IOException,但它并不能解决问题
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();
}
}
Logcat看起来像这样:
06-10 09:51:04.851 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ makeReadOnly is possible
06-10 09:51:04.851 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter D/Schuetzen﹕ Tag isWritable
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ java.io.IOException
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.nfc.tech.Ndef.makeReadOnly(Ndef.java:394)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at net.bits_bremen.bruenjes.gleisteinwriter.myThread.doInBackground(myThread.java:34)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
06-10 09:51:04.898 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ java.io.IOException
06-10 09:51:04.914 32274-14000/net.bits_bremen.bruenjes.gleisteinwriter D/myThread﹕ Tag closed
任何帮助都会很好 可能重复的