Android开启OTG功能/USB Host API功能

Android USB 模式简介

设备模式

        当计算机或其他USB主机需要连接安卓设备时,此时安卓设备是作为“USB设备”角色的,在计算机上显示为 USB 外设。现在的安卓设备已经被赋予了愈加丰富的功能,如MTP相机模式、文件传输模式(类似于U盘)、RNDIS网卡模式等。当使用普通手机数据线连接安卓手机和电脑就可以使用这些功能。

主机模式

        Android 设备充当USB主机,安卓此时充当类似于计算机PC的角色,可以连接键盘、鼠标、U盘以及嵌入式应用USB转串口、转I2C等设备。注意,此时不能再使用普通数据线,而应该使用OTG(On-The-Go)转接线。原理是Android设备通过USB接口中的ID信号线状态决定其接口是工作在主机还是设备模式。如下为OTG转接头:

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

配件模式

        设备模式与配件模式之间的区别在于,在配件模式下,除了 adb 之外,主机还可以看到其他 USB 功能。Android 设备从设备模式开始运行,然后通过重新协商过程转换到配件模式。除了提供AOA功能外,还额外提供了音频功能。如:安卓Host AOA接口转换芯片CH9343。

Android主机模式的开启

        如上文主机模式的介绍,开启Android OTG主机功能,务必使用OTG转换线,确认是否成功可以通过连接的外设是否可以从Android设备USB口是否有电来确认,若仍没有电,其一可以查看设备厂商规格书,其二可以点击系统的“设置”,查看有无主动开启OTG功能的菜单项。

        若如上主机功能可以顺利开启,那么我们的安卓设备就可以连接键盘、鼠标、U盘这些常用外设了。除此类设备之外,安卓系统还提供了一套USB Host API可以支持直接通过应用程序和USB设备通讯,而无需预置设备的USB驱动。该功能极大的提高了安卓设备使用USB产品的灵活性,用户端仅安装APK安卓软件即可。如客户使用安卓连接USB转串口设备CH340、USB转多串口设备CH342或者用户使用USB MCU开发的自定义厂商类设备、HID设备等使用场景。

        当然因为该特性并非所有安卓厂商都会强制支持和开放,所以我们需要通过以下方式来确认或者进行必要的配置来开启该功能。

Android USB Host API功能的确认和开启

步骤一:确定 Android 设备是否支持 USB Host 功能,具体可以通过以下步骤进行确认:

1. 查看手机或平板设备参数,或者直接联系厂家咨询;

2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测,汉化版软件名称为:USB 主机诊断;

Note:若步骤1提示支持,则无需进行如下步骤。

步骤二:确认系统是否包含 USB Host API 相关的库文件,习惯也称驱动文件。存放路径为:/system/lib。

通过手机助手工具或者直接使用“adb shell”连接手机,进入该目录进行查看,以我的手机为例,通过 adb 查看结果如下图所示:

如果没有该文件,可以咨询厂家或者拷贝相同处理器的安卓系统下的该文件至此目录下。

步骤三:确认 Android 系统是否已经开放了 USB Host 权限,这一步也是最重要的一步。

由于需要修改系统文件,所以要保证 Android 设备已经具有 Root 权限,否则会遇到各种未知的问题。Root 之后,可以通过手机助手或者“ES文件浏览器”等软件等操作系统文件。

进入目录“/system/etc/permissons”,查看该目录下,是否有文件“android.hardware.usb.host.xml”,如果没有,则需要自己创建一个或者直接从其他系统中拷贝过来。之后打开该文件,添加如下内容:

<permissons>
    <feature name="android.hardware.usb.host"/>
</permissons>

在该文件下查找是否存在名称为“handheld_core_hardware.xml”或者“tablet_core_hardware.xml”的文件。同理,未找到需要新建或者拷贝过来。打开文件,在 <permissions> section 中添加如下内容:

<feature name="android.hardware.usb.host">

添加完成后文件内容如下所示:


步骤四:非常重要,就是重启 Android 设备

注:查看安卓系统的 CPU 信息,可以进入“adb shell”之后,通过“cat /proc/cpuinfo”查看。

读者也可以移步至《CH340安卓应用开发指南》,来了解关于此用法的详情。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Android手机中使用OTG功能调试USB串口的Demo源码程序可在Android Studio中运行和调试。以下是一个简单的示例: 1. 首先,在MainActivity.java文件中创建一个类,用于处理与USB设备的通信。在该类中,你可以实现打开、关闭USB串口、发送和接收数据等功能。 ```java public class USBSerialCommunicator { private final Context mContext; private final UsbManager mUsbManager; private UsbDeviceConnection mConnection; private UsbSerialDevice mSerialDevice; private final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; public USBSerialCommunicator(Context context) { mContext = context; mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE); } public void openUSBSerialPort() { // 检查是否有连接的USB设备 HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); if (!deviceList.isEmpty()) { for (UsbDevice usbDevice : deviceList.values()) { // 检查USB设备是否有权限 PendingIntent permissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0); mUsbManager.requestPermission(usbDevice, permissionIntent); if (mUsbManager.hasPermission(usbDevice)) { mConnection = mUsbManager.openDevice(usbDevice); mSerialDevice = UsbSerialDevice.createUsbSerialDevice(usbDevice, mConnection); if (mSerialDevice != null) { if (mSerialDevice.open()) { mSerialDevice.setBaudRate(9600); mSerialDevice.setDataBits(UsbSerialInterface.DATA_BITS_8); mSerialDevice.setStopBits(UsbSerialInterface.STOP_BITS_1); mSerialDevice.setParity(UsbSerialInterface.PARITY_NONE); mSerialDevice.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF); // 设置串口数据接收监听器 mSerialDevice.read(mCallback); } } } } } } // 串口数据接收回调 private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { @Override public void onReceivedData(byte[] bytes) { // 处理接收到的数据 } }; public void sendSerialData(byte[] data) { if (mSerialDevice != null) { mSerialDevice.write(data); } } public void closeUSBSerialPort() { if (mSerialDevice != null) { mSerialDevice.close(); mSerialDevice = null; } if (mConnection != null) { mConnection.close(); mConnection = null; } } } ``` 2. 接下来,在MainActivity.java文件中调用USBSerialCommunicator类的方法,以打开、关闭USB串口,并发送接收数据。 ```java public class MainActivity extends AppCompatActivity { private USBSerialCommunicator mUSBSerialCommunicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mUSBSerialCommunicator = new USBSerialCommunicator(this); mUSBSerialCommunicator.openUSBSerialPort(); byte[] sendData = "Hello!".getBytes(); mUSBSerialCommunicator.sendSerialData(sendData); } @Override protected void onDestroy() { super.onDestroy(); mUSBSerialCommunicator.closeUSBSerialPort(); } } ``` 这是一个简单的示例,展示了如何使用OTG功能调试USB串口的Demo源码程序,并在Android Studio中进行运行和调试。你可以根据需要修改和扩展这个示例,以适应你的具体要求。 ### 回答2: 要在Android Studio上运行和调试OTG功能并调试USB串口的DEMO源码程序,您需要按照以下步骤操作: 1. 首先,确保您的Android手机具备OTG功能并且已经连接了OTG线。 2. 打开Android Studio,点击“File”菜单,选择“New”和“Import Project”选项,然后选择您存放DEMO源码程序的文件夹,点击“OK”导入项目。 3. 等待Android Studio完成项目导入后,找到并打开DEMO源码程序的主活动文件。 4. 检查源码程序中是否已经导入了OTGUSB串口的相关库文件,如果没有,请根据您的需要进行导入。 5. 在源码程序中找到与OTG功能有关的代码片段。这可能是检查设备是否具备OTG功能的代码或者检查OTG线连接状态的代码。 6. 如果没有相关的OTG功能代码,请按照Android开发文档中的指导添加OTG功能支持。 7. 找到与USB串口有关的代码片段。这可能是打开、关闭或者读写USB串口的代码。 8. 检查是否已经在项目的配置文件中申请了USB权限。如果没有,请添加以下权限到AndroidManifest.xml文件中: ```xml <uses-permission android:name="android.permission.USB_PERMISSION" /> ``` 9. 在源码程序中确保已经注册了USB的广播接收器。这个接收器将监听USB设备的插拔和权限相关的事件。 ```java private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if(device != null){ // 在此处进行串口设备的连接和操作 } } else { // 没有获得USB权限 } } } } }; ``` 10. 运行项目并调试。您可以使用虚拟设备或者在手机上运行源码程序,并使用日志输出等方式进行调试。 以上就是在Android Studio上运行和调试OTG功能并调试USB串口的DEMO源码程序的基本步骤。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PC技术小能手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值