Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android UsbHost模式下的TransactionTooLargeException_Android_Exception - Fatal编程技术网

Android UsbHost模式下的TransactionTooLargeException

Android UsbHost模式下的TransactionTooLargeException,android,exception,Android,Exception,我正在使用android库的usb串行接口,我得到了一些奇怪的结果。在与串行端口连续通信2.5小时并成功读写后,我出现以下异常: exception in UsbManager.openDevice android.os.TransactionTooLargeException at android.os.BinderProxy.transact(Native Method) at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IU

我正在使用android库的usb串行接口,我得到了一些奇怪的结果。在与串行端口连续通信2.5小时并成功读写后,我出现以下异常:

exception in UsbManager.openDevice
android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:339)
at android.hardware.usb.UsbManager.openDevice(UsbManager.java:255)
at com.hoho.android.usbserial.driver.UsbSerialProber$1.probe(UsbSerialProber.java:63)
at com.hoho.android.usbserial.driver.UsbSerialProber.probeSingleDevice(UsbSerialProber.java:174)
java.io.FileNotFoundException: /sdcard/log.txt: open failed: EMFILE (Too many open files)
at libcore.io.IoBridge.open(IoBridge.java:406)
at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
at java.io.FileWriter.<init>(FileWriter.java:58)
at org.example.myapp.util.L.log(L.java:32)
但当我强制关闭应用程序然后重新启动时,一切正常,我的应用程序可以再次与端口通信

在异常发生之前,我会遇到以下异常:

exception in UsbManager.openDevice
android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:339)
at android.hardware.usb.UsbManager.openDevice(UsbManager.java:255)
at com.hoho.android.usbserial.driver.UsbSerialProber$1.probe(UsbSerialProber.java:63)
at com.hoho.android.usbserial.driver.UsbSerialProber.probeSingleDevice(UsbSerialProber.java:174)
java.io.FileNotFoundException: /sdcard/log.txt: open failed: EMFILE (Too many open files)
at libcore.io.IoBridge.open(IoBridge.java:406)
at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
at java.io.FileWriter.<init>(FileWriter.java:58)
at org.example.myapp.util.L.log(L.java:32)
似乎有某种缓冲区或高速缓存被填满,从而阻止了与设备的通信

我怎样才能排除异常

更新:


即使遇到异常,写入日志文件也不会失败。它只影响与usb设备的通信。

打开的文件太多。 我发现的问题:
-您从未关闭日志文件
-在log函数中打开文件,静态文件更好,可以在log_init()中初始化;功能
或者,将日志文件设为对象变量,并在构造函数中初始化它

我认为解决这些问题可以解决您的问题。

创建文件时,您不能使用传递目录路径吗

public class L {

    public static File logFile = new File("sdcard/log.txt");

    public  synchronized void log(String message){        

       ....

每次调用新文件时,都会向系统请求文件资源。当你继续这样做时,系统会抱怨你打开了太多的文件。要避免这种情况,请在更新时仅请求一次文件。

。这个问题是由我所描述的引起的。请修复这些问题。您是否收到类似于“由于未经授权试图访问您设备中的系统,应用程序已被迫关闭”的通知(我的是法语翻译)。我得到了一个类似的错误,尽管允许活动访问USB设备。您是否从单独的服务访问USB?它是在一个单独的过程中(就像我的一样)?我还没有找到解决方案,每次我都会遇到这种情况(在一台设备上也可以),不,我没有收到这个通知。事实上,应用程序不是强制关闭的。我从一个单独的服务访问USB,但我没有权限问题。你尝试过我的建议吗?我通过在活动中而不是服务中使用openDevice解决了问题。另一个信息是,它只发生在galaxy 4S上4.2.2的构建JDQ39.I9505XXUDMI1上。在4.2.2版本JDQ39.I9505XXUBMH1Snippet上没有出现这种情况—只有答案没有用处。你好像换了两条线。请解释为什么这样可以解决问题。