我正在使用 Galaxy Nexus (4.2.2) 和 ADK Board(Microchip Co. 的 PIC24F) 使用 Android Open Accessory 制作应用程序。
在与 USB 通信时发生以下事件后,如果它再次启动我的应用程序,OutputStream.write() 会在尝试将数据传输到 ADK Board 时抛出 IOException(ENODEV)。
・应用程序被Android OS强行杀死(例如内存不足,任务杀手应用程序等)
・应用程序已更新为新版本。
拔掉USB一次就成功了。
代码:
public void openAccessory(UsbAccessory accessory) {
ParcelFileDescriptor p = mUsbManager.openAccessory(accessory);
if (p == null) { return;}
else {mFileDescriptor = p;}
FileDescriptor fd = mFileDescriptor.getFileDescriptor();
if (fd == null) {return;}
mOutputStream = new FileOutputStream(fd);
if (isSendSuccess()) {
mInputStream = new FileInputStream(fd);
}
}
private boolean isSendSuccess() {
final byte[] test = new byte[]{0x01,02};
for (int i=0; i<2; i++) { //send test
try {
mOutputStream.write(test);
return true;
} catch (IOException e) {
e.printStackTrace(); //throw ENODEV after app is forced kill.
}
}
return false;
}
错误日志:
W/System.err(17198): java.io.IOException: write failed: ENODEV (No such device)
W/System.err(17198): at libcore.io.IoBridge.write(IoBridge.java:462)
W/System.err(17198): at java.io.FileOutputStream.write(FileOutputStream.java:187)
・・・・・・
W/System.err(17198): Caused by: libcore.io.ErrnoException: write failed: ENODEV (No such device)
W/System.err(17198): at libcore.io.Posix.writeBytes(Native Method)
W/System.err(17198): at libcore.io.Posix.write(Posix.java:178)
W/System.err(17198): at libcore.io.BlockGuardOs.write(BlockGuardOs.java:191)
W/System.err(17198): at libcore.io.IoBridge.write(IoBridge.java:457)
W/System.err(17198): ... 23 more
codicil:
我知道存在一个问题,比如:
http ://code.google.com/p/android/issues/detail?id=20545
所以,我定期将数据从 ADK Board 发送到我的应用程序,它工作正常。
但是,会出现上述问题。
您能否告知是否有解决方法?
谢谢。