在本次尝试中,我的安卓手机(HTC One X) 通过OTG线作为usb主机模式列出当前插入的usb设备,版本要求minSDKVersion=“12”。

没有外设的情况下,结果如下图所示:

通过OTG线插入读卡器设备后,结果如下:

为了指定应用程序以usb-host模式运行,在AndroidManifest.xml文件中需要添加<uses-feature android:name="android.hardware.usb.host">并且修改安卓的minSDKVersion="12"

主要代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.androidusbhost"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-feature android:name="android.hardware.usb.host" />
  8. <uses-sdk
  9. android:minSdkVersion="12"
  10. android:targetSdkVersion="18" />
  11.  
  12. <application
  13. android:allowBackup="true"
  14. android:icon="@drawable/ic_launcher"
  15. android:label="@string/app_name"
  16. android:theme="@style/AppTheme" >
  17. <activity
  18. android:name="com.example.androidusbhost.MainActivity"
  19. android:label="@string/app_name" >
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22.  
  23. <category android:name="android.intent.category.LAUNCHER" />
  24. </intent-filter>
  25. </activity>
  26. </application>
  27. </manifest>

主要的java代码如下:

  1. package com.example.androidusbhost;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5.  
  6. import android.hardware.usb.UsbConstants;
  7. import android.hardware.usb.UsbDevice;
  8. import android.hardware.usb.UsbManager;
  9. import android.os.Bundle;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14. import android.app.Activity;
  15. import android.content.Context;
  16.  
  17. public class MainActivity extends Activity {
  18.  
  19. Button btnCheck;
  20. TextView textInfo;
  21.  
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_main);
  26. btnCheck = (Button) findViewById(R.id.check);
  27. textInfo = (TextView) findViewById(R.id.info);
  28. btnCheck.setOnClickListener(new OnClickListener() {
  29.  
  30. @Override
  31. public void onClick(View arg0) {
  32. checkInfo();
  33. }
  34. });
  35. }
  36.  
  37. private void checkInfo() {
  38. UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
  39. HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
  40. Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
  41.  
  42. String i = "";
  43. while (deviceIterator.hasNext()) {
  44. UsbDevice device = deviceIterator.next();
  45. i += "\n" +
  46. "DeviceID: " + device.getDeviceId() + "\n" +
  47. "DeviceName: " + device.getDeviceName() + "\n" +
  48. "DeviceClass: " + device.getDeviceClass() + " - "
  49. + translateDeviceClass(device.getDeviceClass()) + "\n" +
  50. "DeviceSubClass: " + device.getDeviceSubclass() + "\n" +
  51. "VendorID: " + device.getVendorId() + "\n" +
  52. "ProductID: " + device.getProductId() + "\n";
  53. }
  54.  
  55. textInfo.setText(i);
  56. }
  57.  
  58. private String translateDeviceClass(int deviceClass){
  59. switch(deviceClass){
  60. case UsbConstants.USB_CLASS_APP_SPEC:
  61. return "Application specific USB class";
  62. case UsbConstants.USB_CLASS_AUDIO:
  63. return "USB class for audio devices";
  64. case UsbConstants.USB_CLASS_CDC_DATA:
  65. return "USB class for CDC devices (communications device class)";
  66. case UsbConstants.USB_CLASS_COMM:
  67. return "USB class for communication devices";
  68. case UsbConstants.USB_CLASS_CONTENT_SEC:
  69. return "USB class for content security devices";
  70. case UsbConstants.USB_CLASS_CSCID:
  71. return "USB class for content smart card devices";
  72. case UsbConstants.USB_CLASS_HID:
  73. return "USB class for human interface devices (for example, mice and keyboards)";
  74. case UsbConstants.USB_CLASS_HUB:
  75. return "USB class for USB hubs";
  76. case UsbConstants.USB_CLASS_MASS_STORAGE:
  77. return "USB class for mass storage devices";
  78. case UsbConstants.USB_CLASS_MISC:
  79. return "USB class for wireless miscellaneous devices";
  80. case UsbConstants.USB_CLASS_PER_INTERFACE:
  81. return "USB class indicating that the class is determined on a per-interface basis";
  82. case UsbConstants.USB_CLASS_PHYSICA:
  83. return "USB class for physical devices";
  84. case UsbConstants.USB_CLASS_PRINTER:
  85. return "USB class for printers";
  86. case UsbConstants.USB_CLASS_STILL_IMAGE:
  87. return "USB class for still image devices (digital cameras)";
  88. case UsbConstants.USB_CLASS_VENDOR_SPEC:
  89. return "Vendor specific USB class";
  90. case UsbConstants.USB_CLASS_VIDEO:
  91. return "USB class for video devices";
  92. case UsbConstants.USB_CLASS_WIRELESS_CONTROLLER:
  93. return "USB class for wireless controller devices";
  94. default: return "Unknown USB class!";
  95.  
  96. }
  97. }
  98. }

布局文件主要代码:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. android:orientation="vertical"
  10. tools:context=".MainActivity" >
  11.  
  12. <TextView
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_gravity="center_horizontal"
  16. android:autoLink="web"
  17. android:text="http://android-er.blogspot.com/"
  18. android:textStyle="bold" />
  19. <Button
  20. android:id="@+id/check"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:text="Check USB devices" />
  24. <TextView
  25. android:id="@+id/info"
  26. android:layout_width="match_parent"
  27. android:layout_height="wrap_content" />
  28.  
  29. </LinearLayout>

usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备的更多相关文章

  1. usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备

    之前写了一个简单的例子usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备,下面的这个例子是获取各种usb设备.usb接口以及usb连接点(endpoint) 正如上一 ...

  2. 深圳市共创力咨询CEO杨学明的最新演讲:互联网模式下的企业创新管理

    2018年11月14日, 深圳市共创力咨询董事长.深圳市汇成研发管理咨询公司董事长杨学明先生受邀参加由深圳图书馆主办,深圳手讯视频承办的“倾听行业之声”2018第二届世界CED智慧大会,此次分享的主题 ...

  3. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  4. 【DG】[三思笔记]一步一步学DataGuard

    [DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)..... ...

  5. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    一步一步学Silverlight 2系列(18):综合实例之RSS阅读器   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支 ...

  6. 一步一步学Silverlight 2系列(7):全屏模式支持

    一步一步学Silverlight 2系列(7):全屏模式支持   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言V ...

  7. 【Linux】一步一步学Linux——Linux发展史(01)

    目录 00. 目录 01. Linux概述 02. Linux简史 03. Linux主要特性 04. Linux之父 05. Linux相关术语 06. Linux其它 07. Linux应用领域 ...

  8. xmppmini 项目详解:一步一步从原理跟我学实用 xmpp 技术开发 2.登录的实现

    第二章登录的实现 金庸<倚天屠龙记> 张三丰缓缓摇头,说道:“少林派累积千年,方得达成这等绝技,决非一蹴而至,就算是绝顶聪明之人,也无法自创.”他顿了一顿,又道:“我当年在少林寺中住过,只 ...

  9. 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置

    摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...

随机推荐

  1. JS 数组的一些方法

    1.push() //可以接受任意参数,然后添加到数组的末尾 2.pop()//栈方法,在数组末尾删除一条数据,并且返回这条数据 3.shift()//队列方法,与pop()相似,但是与其相反,在数组 ...

  2. 关于SCANF接受的一些总结

    当C语言中SCANF函数接受到非指定类型的参数时,如:定义为整形输入为字符串,函数会返回一个失败的BOOL类型,以此可以判断是否输入的为指定类型. 当发生一次输入错误的时候,如果想再次进行输入则需要使 ...

  3. SSM框架集成Redis

    SSM-Spring+SpringMVC+Mybatis框架相信大家都很熟悉了,但是有的时候需要频繁访问数据库中不变或者不经常改变的数据,就会加重数据库的负担,这时我们就会想起Redis Redis是 ...

  4. opengl 和 vs2010的安装配置

    1.先安装vs2010, 输个激活秘钥 2.Windows 7下OpenGL如何配置,配置glut:    http://jingyan.baidu.com/article/b0b63dbfd1c08 ...

  5. C# -- 继承规则

    例子1--C#继承的常见问题: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  6. 解析Xml文件的三种方式及其特点

    解析Xml文件的三种方式 1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...

  7. 【前端自动化】Gulp的使用(一):安装gulp

    作为一个.NET码农,在前端高速发展的时代,深深感觉自己那么点“前端”技术不够看,比如开发出来的js css等文件庞大,不便于管理,还记得以前的开发就是累加 html  css   jquery, 现 ...

  8. Google Coral Edge TPU USB加速棒上手体验

    Edge AI是什么?它为何如此重要? 传统意义上,AI解决方案需要强大的并行计算处理能力,长期以来,AI服务都是通过联网在线的云端基于服务器的计算来提供服务.但是具有实时性要求的AI解决方案需要在设 ...

  9. [CentOS7] 磁盘分区(gdisk, fdisk)

    声明:本文主要总结自:鸟哥的Linux私房菜-第七章.Linux 磁碟與檔案系統管理,如有侵权,请通知博主 磁盘分区步骤: 1.先找出当前有哪些磁盘lsblk或blkid(也就是确定是sda还是vda ...

  10. SpringMVC 思想介绍

    MVC 思想简介 博客园好像不支持发布markdown的时序图, 如果你会markdown并且不太熟悉Springmvc执行流程, 照着图在Markdown上面敲一遍执行流程,这是我经历过的最快的记忆 ...