获取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
}
任何人都有一些想法来解决这个问题吗?