格式错误后NFC冻结

时间:2016-03-29 13:47:34

标签: android nfc mifare lg

获取NdefFormatable对象后,如果标签被拉出范围,则调用NdefFormatable.format,函数将无法返回,导致调用线程"冻结"。

要解决此问题,找到的唯一解决方案是重启设备的NFC资源。这对我来说太可怕了,因为需要根特权。

这个问题似乎只发生在某些设备上:

  • 使用Android 5.0.2在LG L90(LG-D410hn)上发生(在3种设备中测试不同)

  • 在摩托罗拉Moto X 2013上测试过,并没有发生。

我的代码:

ndefFormatable = NdefFormatable.get(tag);

if (ndefFormatable == null) {
    return;
}

formatted = false;

final Thread thread2format = new Thread() {
    @Override
    public void run() {
        try {
            ndefFormatable.connect();
            ndefFormatable.format(ndefMessage);  // if communication interrupts, freeze this thread
            formatted = true;
            ndefFormatable.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }

    }
};
thread2format.start();

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

if (!formatted) {
    ndefFormatable.close(); // freeze too
}

任何人都有一些想法来解决这个问题吗?

0 个答案:

没有答案