“这是我参加8月更文应战的第3天,活动概况检查:8月更文应战”

1 导言

随着安卓手机的市场份额逐渐增加,安卓体系的功用也日益强大。运用手机与各类设备通讯的场景也越来越多,本篇文章将数组函数的使用办法介绍怎样运用安卓手机与USB设备进行通讯。

2 USB简介

USB是英文Un数组去重iversal Serial Bus(通用串行总数组公式线)的缩写,是一个外部总线标准,用于标准电脑与外部设备的联接和通讯。是应用在PC范畴的接口技术。现在智能手机也加入了关于USB设备的支撑。

安卓手机支撑USB accessory办法和USB host办法。USB host办法是手机充任主机,为总线供给电力支撑。USB accessory办法正好相反,将手机当作附件把USB设备当作主机。本文中介绍的接口类型为Host办法。

3 相关API

class 说明
UsbManager USB处理器,与联接的USB设备通讯。
UsbDevice USB设备的笼统,每个UsbDevice都代表一个USB设备。
Us电脑截图快捷键ctrl加什么bInt产品批号是生产日期吗erface 界说产品了设备的功用集,一个UsbDevice可能包含一个或多个UsbInterfac接口e,每个Interface都是独立的。
UsbEndpoint UsbEndpoint是Interface的通讯通道。
UsbDeviceConnection hos数组指针t与d面试毛遂自荐3分钟通用evice 树立的联接,并在endpoint 传输数据。
UsbRequest USB 央求包。
UsbConstants USB常量的界说

4 装备AndroidManifest.xml文件

在进行USB开发时,需求在AndroidManifest.xml文件面试问题大全及答案大全中装备相应的属性。装备代码如下:

<!--增加权限--电脑怎样康复出厂设置>
<uses-feature android:name="android.hardware接口文档.usb.host"/>
<activity面试毛遂自荐一分钟
and接口和抽象类的差异roid:name=".MainActivity"
android:screenOrientat电脑黑屏ion="landscape">
&l产品生命周期t;intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- 假如这里是建议Activity的话,点击USB接入的弹窗会建议该页面 -->
<category android:name="android.inten数组排序t.category.LAUNCHER" />
<面试问题大全及答案大全action android:name="a数组排序ndroid.hardware.usb.action.USB_DEVICE_ATTAC接口HED" />
</intent-fi数组和链表的差异lter>
<meta-data
android:name="android.hardware.usb.action.USB_DEV数组去重办法ICE_ATTACHED"面试问题
android:re电脑怎样联接wifisource="@xml/device_filter电脑" />
</activity>

5 过滤设备

在XML资源文件中,声明要产品过滤的USB设备的元素电脑黑屏却开着机。一般,假如要过滤特定设备并运用类,子类和协议(假如要过滤一组USB设备接口无权限是什么意思(如大容量存储设备或数码相机)),请运用供货商(vendor-id)和产品(produ面试问题大全及答案大全ct-id)ID,在开发中这些过滤ID一般能够在文档中找到,或许产品质量法在设备处理器中检查。

将资源文件保存在res/xml/目录中。资源文件名(不带.xml扩展名)有必要与您在元素中指定的文件名相同。装备格式如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device
class="255"
product-面试毛遂自荐简略大方id接口="5678"
protocol="1 "
subclass="66"
vendor-id="1234" />
</resources>

6 监听USB设备的插拔

Android 体系中,USB 设备的刺进和拔出是以体系播送的办法发送数组函数的使用办法的,咱们只需注数组指针数组指针监听这个播送就好。

注册播送代码如下:

public cl面试技巧和注意事项ass USBReceiver extends BroadcastReceiver {
public static fina产品设计专业l String ACTION_US电脑怎样联接wifiB_PERMISSION = "com.andr产品批号是生产日期吗oid.example.USB_PERMISSION";
@Override
public void onReceive(Context conte电脑截图快捷键ctrl加什么xt, Inten产品经理t intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(数组和链表的差异action)) {
// 获取权限效果的播送
synchronized (this) {
UsbDevice device = (UsbDevice)产品质量法 intent接口卡.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (dev面试ice != null) {
//call method to set up device communication
i接口卡f (intent.g接口类型etBooleanExtra(UsbManager.EXTRA_PERMIS面试毛遂自荐简略大方SION数组指针_G电脑怎样康复出厂设置RANTED, false)) {
Log.e("USBReceiver", "获取权限成功:" + device.getDeviceName());
} else {
Log.e("USBReceiver", "获取权限失利:" + device.getDeviceName());
}
}
}
}else if (UsbManage数组去重r.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
// 有新的设备刺进了,在这里一般产品会判别这个设备是不是咱们想要的,是的话就去央求权限
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
// 有设备拔出了
}
}
}

7 获取UsbManager

UsbManager类是安卓体系供给的用于处理USB设备的类,其间关于USB设备的操作大多数产品艺术设计需求调用此类政策中的办法完结。UsbManager类通过获取体系服务的办法获取。

usbManager = (Usb电脑键盘功能基础知识Manager) context.g数组初始化etSy产品质量法stemService(Context.USB_SERVICE)产品生命周期;

8 获取政策UsbDevice

UsbDevice标识着搜索到的USB设备,政策UsbDevice设备需面试求通过p数组排序id和v产品设计id进行差异。

/**
* @param ven数组词dorId  厂商ID
* @param productId 产品ID
* @return  device
*/
public U产品艺术设计sbDevice getUsb接口卡Device(int vendorId, int productId) {
HashMap<Stri面试技巧ng, UsbDevice> dev接口测验面试题iceLis产品设计工作方向t = usbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList面试毛遂自荐简略大方.values().iterator();
while (deviceIterator.接口测验hasNext()) {
UsbDevice device = deviceIterator.next();
if (device.getVendorId() == vendorId && device.getProductId() == productId) {
Log.e("USBUtil", "产品设计工作方向getDev接口无权限ice电脑怎样康复出厂设置List: " + device.getDeviceName())面试必问10大问题答复;
return device;
}
}
Toast.mak接口crc过错计数eText(context, "没有对应的设备接口文档", Toast.LENGTH_SHORT).show();
return面试毛遂自荐 null;
}

9 请求USB设备运用权限

 /**
* 判别对应 USB 设备是否有权限
*/
public boolean hasPermission(UsbDevice device) {
return usbMana数组的界说ger.hasP接口测验面试题ermission(de产品设计工作方向vice);
}
/**
* 央求获取指定 USB 设备的权限
*/
public void requestPe接口无权限是什么意思rmission(UsbDevice device) {
if (device != null) {
if (usbManager.hasPermission(devi面试毛遂自荐一分钟ce)) {
Toast.产品设计专业makeText(context, "现已获取到权限", Toast.LENGTH_SHORT).show接口文档();
} else {
if (mPermissionIntent != null) {
usbManager.requestPermission(device, mPerm产品生命周期issionIntent);
Toast.makeText(contex接口测验面试题t, "央求USB权限", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(数组指针context, "请注册USB数组去重播送", Toa接口crc过错计数st.LENGTH_LONG).数组函数的使用办法show();
}
}
}
}

10 USB设备收发数据

(1)翻开通讯电脑端口

 public boolean openPort(UsbDe接口文档vice device) {
//获产品生命周期取设备接口,一般只要一个
usbInterface = device.getInterface(0);
// 判别面试是否有权限
if (hasPermission(device)) {
// 翻开设备,获取 UsbDeviceConnection 政策,联接设备,用于后边的通讯
usbConnection = usbManager.openDevice(device);
if (usbConnection == null)电脑截图快捷键 {
return false;
}
if (usbConnection.claimInterface(us面试bInterface, true)) {
Toast.makeText(Utils.getContext(), "找到 US接口无权限是什么意思B 设备接口", Toast.LENGTH_SHORT).show();
} else {面试常见问题及答复技巧
usbConnection.close();
To数组词ast.makeText(产品运营Utils.getContext(), "没有找到 USB 设备接口", Toast.LENGTH_SHORT).show();
return false;
}
} else {
Toast.makeText(Utils.getC数组函数的使用办法ontext(), "没有 USB 权限", T产品艺术设计o产品设计工作方向ast.LENGTH_SHORT).show();
re电脑怎样联接wifiturn false;
}
//获取接口上的两个端点,别离对应OUT和IN
for (int i = 0; i < usbIn面试毛遂自荐terface.getEndpointCount(); ++i) {
UsbEndpoint电脑怎样截图 end = usbInterface.getEndpoint(i);
if (end.getD接口卡irection() == UsbCon产品生命周期stants.USB面试常见问题及答复技巧_DIR_IN) {
usbEndpointIn = end;//获取读入数据的UsbEndpoint
} else {
usbEndpointOut = end;//获取发送的数据的UsbEndpoint
}
}
return true;
}

(2)收发数据

  调用UsbDeviceConnection的bulkTr电脑键盘功能基础知识ansfer办法与USB设备通讯,向USB设备发送数据用usbEndpointOut,承受USB设备的数据用usbEndpointIn。面试技巧和注意事项
发送数据:

int ret = usbDeviceConnection.bulkTr电脑黑屏却开着机ansfe电脑截图快捷键ctrl加什么r(usbEndpointOut, data, data.length, 100);

接纳数据:USB接纳数据需开启数据读取线程。

//开线程读取数据
private void st数组去重artReading() {
new数组的界说 Thre数组函数的使用办法ad(new Runnable() {
@Override
public void run() {
while (isReading) {
synchronized (this) {
//创建接纳数据的数组
byte[] data = new byte[usbEndpointIn.getMaxPacketSize()];
//读取数据
int ret = usbConnecti面试毛遂自荐3分钟通用on.bulkTransfer(usbEndpointIn, data, data.length, 100);
}
}
}
}).start();
}

11 结语

安卓USB通讯具有即插即用,可热插拔,具有自动装备能力,用户只需简略地将外设插人到手机就能自动识别和装备USB设备。现在安卓手机、平板都具有USB接口,联接活络,易扩展。

USB通讯速率相对较快,USB2.0理论速度约每秒480Mbp数组和链表的差异s(约每秒60MB),USB3.0的理论速度能够到达每秒5Gbps(约为每秒625MB)。

群众号:程序员喵大人(专注于Android各类学习笔记、面试题以及IT类资讯的共享。)