安卓usb数据接收
之前在论坛里面求助了关于监听数据接收的问题,因为第一次做这方面,可能我提的问题太简单了,大神都不愿意回答我,(之前的帖子)晚上FQ浏览网站发现问题的解决办法,
原文是:最近老板让弄安卓和一块板子通信,现在的情况是我第一次发送数据可以接受到(一些参数的初始化),然后我再发送数据,就接收不到了,数据肯定是发送成功了,只是我的逻辑代码有问题(新手,懂的较少),因为我退出了然后再进入程序数据就接收到了,不知道如何实现线程内的代码一直处于监听状态,我的代码:
Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub UsbRequest request = new UsbRequest(); boolean initilzed = request.initialize(conn, endpointIn); System.out.println(initilzed); ByteBuffer buffer = ByteBuffer.allocate(38); request.queue(buffer, 38); while (initilzed) { if (conn.requestWait().equals(request)) { byte[] data = buffer.array(); conn.bulkTransfer(endpointIn, data, 38, 1000); // System.out.println(data.toString()); final String message = "Read " + data.length + " bytes: \n" + HexDump.dumpHexString(data) + "\n\n"; System.out.println(message); } } } };
现在说下解决办法:其实很简单,就是loop循环里面执行异步任务:
Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub // System.out.println("进入线程了"); while (true) { synchronized (this) { UsbRequest request = new UsbRequest(); request.initialize(conn, endpointIn); ByteBuffer buffer = ByteBuffer.allocate(38); request.queue(buffer, 38); if (conn.requestWait().equals(request)) { byte[] data = buffer.array(); conn.bulkTransfer(endpointIn, data, 38, 1000); final String message = "Read " + data.length + " bytes: \n" + HexDump.dumpHexString(data) + "\n\n"; System.out.println(message); } } } } };
高手见谅,权当是自己记录的一点心得,毕竟网上别人关于这方面资料少,具体的例子也没有。