Android 捕获Ndef WriteDefMessage中的NFCSTATUS\u存储不足\u错误

Android 捕获Ndef WriteDefMessage中的NFCSTATUS\u存储不足\u错误,android,nfc,ioexception,ndef,Android,Nfc,Ioexception,Ndef,在使用Ndef.writeNdefMessage写入NFC标记时,我在catch块中得到一个IOException错误。检查Logcat显示,PhLibNfc_Ndef_Write函数触发了NFCSTATUS_Unlimited_存储错误,有效地触发了IOException。是否有任何方法可以在应用层中捕获此NFCSTATUS_存储不足错误。我在谷歌上搜索了很多,但最后总是得到PhLibNfc\u Ndef\u Write函数的源代码 我用来写标签的代码 final NdefMessage m

在使用Ndef.writeNdefMessage写入NFC标记时,我在catch块中得到一个IOException错误。检查Logcat显示,PhLibNfc_Ndef_Write函数触发了NFCSTATUS_Unlimited_存储错误,有效地触发了IOException。是否有任何方法可以在应用层中捕获此NFCSTATUS_存储不足错误。我在谷歌上搜索了很多,但最后总是得到PhLibNfc\u Ndef\u Write函数的源代码

我用来写标签的代码

final NdefMessage  message = new NdefMessage(bytearray);
final NdefFormatable ndefFormatable = NdefFormatable.get(tag);
if(ndefFormatable == null){
final Ndef ndef = Ndef.get(tag);
ndef.connect();
if(ndef.isConnected() && ndef.isWritable()){
    new Thread(new Runnable() {
        public void run() {
            try {
                // this logic is not working. Status quo remains
                int actlen = ndef.getMaxSize();
                if (actlen < arrayLen) {
                    Toast.makeText(tagHandler.this, "Space not available", 20).show();
                }
                ndef.writeNdefMessage(message); <-- error is triggered here
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start(); //runnable
ndef.close();
return true;
}

有关捕获NFCSTATUS\u Unlimited\u存储错误的任何帮助?

在写入标记之前,请调用
Ndef
技术上的
getMaxSize()
。这将告诉您邮件是否合适,从而完全避免IOException。

谢谢。成功了。尽管如此,存储空间故障似乎还有其他原因,因为即使预期的写入数据长度低于通过Ndef.getTag(tag.getMaxSize()获得的数据长度。我仍然收到NFCSTATUS错误。对于Mifare UL-C卡,getMaxSize()是否考虑了不可编程的块(使用OTP位阻止)?getMaxSize()后面的计算主要基于卡第3页中的标记大小声明(NFC论坛类型2标记规范称为能力容器)。如果通过在第2页中设置某些位来阻止为NDEF存储保留的某些页面,则不考虑这一点。
E/NFC JNI(705): phLibNfc_Ndef_Write() returned 0x001f[NFCSTATUS_INSUFFICIENT_STORAGE]
W/System.err(547): java.io.IOException
W/System.err(547):  at android.nfc.tech.Ndef.writeNdefMessage(Ndef.java:313)
W/System.err(547):  at com.example.tagreader.tagHandler$2.run(tagHandler.java:270)
W/System.err(547):  at java.lang.Thread.run(Thread.java:856)