android 通过usb 读取数据
来源:互联网 发布:java小游戏源代码文件 编辑:程序博客网 时间:2024/05/21 07:50
背景介绍:
老大忽然跟我说:今天你做一个东西,能确保我们的usb外设发送的数据能被接受到。
然而,作为一个android零基础 的小白(初创公司真是身兼多职~。~),只能各种找资料,最后 ac了。
一、查找大概的代码:
在activity下开一个线程,传usbManager,代码如下:
<span style="font-size:18px;">package com.example.administrator.acceptusbdata;import android.content.Context;import android.hardware.usb.UsbDevice;import android.hardware.usb.UsbManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import java.util.HashMap;import java.util.Iterator;public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { final String TAG = "onCreate"; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UsbManager usbManager = (UsbManager)getSystemService(Context.USB_SERVICE); //getSystemService只能在activity下使用 new Thread(new MyThread(1,usbManager)).start(); //启动线程 }}</span>
package com.example.administrator.acceptusbdata;import android.content.Context;import android.hardware.usb.UsbDevice;import android.hardware.usb.UsbDeviceConnection;import android.hardware.usb.UsbEndpoint;import android.hardware.usb.UsbInterface;import android.hardware.usb.UsbManager;import android.hardware.usb.UsbRequest;import android.util.Log;import java.nio.ByteBuffer;import java.util.HashMap;import java.util.Iterator;/** * Created by Administrator on 2016/9/28 0028. */public class MyThread implements Runnable { int count=1,number; UsbManager mUsbManager; public MyThread(int num,UsbManager usbManager) { number=num; System.out.println("创建线程"+number); mUsbManager = usbManager; } public void run() { while (true) { System.out.println("线程" + number + ":计数" + count); HashMap<String,UsbDevice> deviceHashMap = mUsbManager.getDeviceList(); Iterator<UsbDevice> iterator = deviceHashMap.values().iterator(); System.out.println("deviceHashMap.isEmpty()"+deviceHashMap.isEmpty()); while(iterator.hasNext()) { UsbDevice usbDevice = iterator.next(); UsbInterface usbInterface = usbDevice.getInterface(0);//USBEndpoint为读写数据所需的节点 UsbEndpoint inEndpoint = usbInterface.getEndpoint(0); //读数据节点 UsbDeviceConnection connection = mUsbManager.openDevice(usbDevice); connection.claimInterface(usbInterface, true); //发送数据 byte[] byte2 = new byte[1024]; //读取数据1 两种方法读取数据 int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000); System.out.println("ret"); Log.i("ret", "ret:" + ret); Log.i("ret", "bat is ok length:" + byte2.length); for (Byte byte1 : byte2) { Log.i("ret", "byte1 :" + byte1); } } } }}
参考链接:http://blog.csdn.net/centralperk/article/details/9312401
二、getDeviceList()搜索不到设备
在以上基础下,遇到一个问题:getDeviceList()搜索不到设备:
然后参考链接中的方法解决了,不过其中push文件到android设备、编辑andoird文件等操作 都是同事帮着完成的~毕竟android小白。。
三、系统签名
当时装上后报错说权限不够,同事帮给app签名后就ok了。
至此就能搜索到设备了。但是接受数据还有问题,后面发现是byte数组开小了,usb外设是直接发一个包过来的,包的size 比数组大就直接不存进去(而不是覆盖存入),改了byte数组大小就success了。
最后附上两个参考链接,帮助理解api:
http://home.bdqn.cn/thread-67074-1-1.html
https://developer.android.com/reference/android/hardware/usb/package-summary.html
0 0
- android 通过usb 读取数据
- android读取usb设备数据
- Android USB通信(读取数据)
- 关于通过驱动程序读取usb接口数据的问题?
- Android 下通过jni读取i2c数据
- Android 下通过jni读取i2c数据
- Android 下通过jni读取i2c数据
- Android 下通过jni读取i2c数据
- Android端通过usb和pc端互传json数据
- js读取usb扫码枪数据
- 关于周立功lpc3250中通过usb读取SD卡中的数据分析
- 通过mysqli读取数据
- 通过properties读取数据
- Android开发之通过CursorAdapter读取数据(源代码分享)
- Android通过USB共享网络
- USB HID设备读取数据问题
- usb转串口异步读取数据
- USB Device 数据读取方式的研究
- STM32F207ZG型号gpio配置
- html元素居中
- 数据结构(一)——顺序表(C语言实现)
- JAVA异常
- webstrom 配置coffeescript开发环境
- android 通过usb 读取数据
- PHP读取文件内容的五种方式
- 访问者模式
- 揭开Spring事务处理
- Mybatis通过注解方式实现批量插入数据库
- 单利模式的3种写法
- 117. Populating Next Right Pointers in Each Node II
- 为什么要序列化javabean
- redis分布式锁实现