android 通过usb 读取数据
2016-09-30 16:03
351 查看
android 通过usb 读取数据 标签: android 2016年09月30日 16:03:18 5769人阅读 评论(0) 收藏 举报
分类: android(2)
作者同类文章 X 版权声明:本文为博主原创文章,未经博主允许不得转载。 背景介绍:
老大忽然跟我说:今天你做一个东西,能确保我们的usb外设发送的数据能被接受到。
然而,作为一个android零基础 的小白(初创公司真是身兼多职~。~),只能各种找资料,最后 ac了。
一、查找大概的代码:
在activity下开一个线程,传usbManager,代码如下:
[html] view plain copy print?<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>
另写的线程:
[html] view plain copy print?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
分类: android(2)
作者同类文章 X 版权声明:本文为博主原创文章,未经博主允许不得转载。 背景介绍:
老大忽然跟我说:今天你做一个东西,能确保我们的usb外设发送的数据能被接受到。
然而,作为一个android零基础 的小白(初创公司真是身兼多职~。~),只能各种找资料,最后 ac了。
一、查找大概的代码:
在activity下开一个线程,传usbManager,代码如下:
[html] view plain copy print?<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>
<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>
另写的线程:
[html] view plain copy print?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);
}
}
}
}
}
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
相关文章推荐
- android 通过usb 读取数据
- Android通过json向MySQL中读写数据的方法详解【读取篇】
- Android 下通过jni读取i2c数据
- Android开发之通过CursorAdapter读取数据(源代码分享)
- Android数据存储:获取网络图片把图片保存到SD卡中并从SDk卡中读取(通过Bitmap方法)
- android读取usb设备数据
- Android 下通过jni读取i2c数据
- Android端通过usb和pc端互传json数据
- Android 下通过jni读取i2c数据
- android通过usb读取U盘的方法
- android端和pc端使用usb进行socket通信,其中android是服务器端,pc是客户端。如何实现安卓端输入的数据通过按钮发送到pc端?
- Android开发-通过ADB+Socket实现USB数据传输
- Android端通过Usb建立Socket通讯(实时发送视频数据)
- Android 下通过jni读取i2c数据
- 通过ajax来读取xml里面的数据,以及查询好数据如何写入xml里去 来供ajax读取
- Android播放器装载读取数据
- 在Android中,通过extras在activity之间传递数据
- Android 使用SharedPreferences进行数据存储和读取数据
- android GPS数据读取
- 通过OracleDataReader来读取BLOB类型的数据 (转载)