Android USB 主机模式

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程) 使用python对创芯科技CANalyst-II分析仪进行二次开发 阅读详情

Android USB Host(Android USB 主机通讯)

    翻译很烂,纯当练手,大家权当消遣好了…   :》
    

    当你的Android手机是在USB主机模式下,它充当USB主机,开启设备,并列举已连接的USB设备。 这种模式,在Android 3.1及以上版本的支持。
    

    API 预览

    在开始学习USB Host之前,理解并掌握你所需要用到的类是很重要的。下面的表格描述了 android.hardware.usb包下的USB host 的API。
    
ClassDescription
UsbManager可以让你列举USB设备,并和设备交互;
UsbDevice
表示已连接的USB设备, 包含了访问设备标识信息的方法、接口和挂在点。
UsbInterface
表示设备接口,定义了一些列的功能函数。一个设备可以包含一个或者多个接口。
UsbEndpoint
表示一个挂载点接口,定义了一个交互通道。一个接口可以包含一个或者多个挂载点,
通常都包含用于和USB设备交互的输入输出双向端点 。
UsbDeviceConnection
表示到USB设备的一个基于端点通信的接口,这个类支持同步或者异步数据的来回通讯;
UsbRequest代表一个异步的,基于UsbDeviceConnection通讯的异步请求。
UsbConstants定义了一些USB常量,与linux内核中的 linux/usb/ch9.h 中的定义一致。
    在和USB设备交互的时候,通常情况下,你需要用到所有的这些类(除了交互的时候,只需要用到 UsbRequest)。总的来说,你首先需要获取   UsbManager对象来查询目标设备 UsbDevice。当获得设备 UsbDevice之后,你需要找到适当的   UsbInterface以及该接口对应的 UsbEndpoint  ,从而进行交互。一旦拿到真确的端点,打开连接 UsbDeviceConnection,以此和USB设备进行交互。

    Manifest文件的必要节点

    下面的列表,列出了在使用USB host的API之前,你所需要添加到Manifest文件中的东西:
    
  • 由于不能确保所有的Android设备都支持USB host 的API , 我们可以在Manifest文件中加入 <uses-feature>节点,来声明我们的应用需要android.hardware.usb.host 支持.
  • 设置应用程序的最低支持的SDK版本为12或者更高. USB 主机模式的 API 在12以前的版本上不适用.
  • 如果希望你的应用能够接收到USB设备挂在的通知,则需要在你的主Activity的android.hardware.usb.action.USB_DEVICE_ATTACHED过滤器中指定 <intent-filter> 和<meta-data> 节点对.  <meta-data> 节点对应着一个外部XML 资源文件,这个资源文件定义了你想检测的设备的一些唯一标识信息.
在XML资源文件中,通过声明节点 <usb-device> 来过滤你想要过滤的设备. 以下列表列出了 <usb-device>的属性. 总的来说, 使用 vendor-id 和 product-id 来过滤指定的USB设备,使用 class, subclass 和 protocol 来过滤一组设备, 比如说大容量存储设备和数码相机. 你可以指定所有的属性或者一个都不指定.如果你什么属性都不设置,就将匹配所有的USB设备,当程序需要的时候,你可以这么指定:
  • vendor-id
  • product-id
  • class
  • subclass
  • protocol (device or interface)

该资源文件保存在 res/xml/ 目录下. 它的文件名(不包含.xml后缀名) 必须和<meta-data> 节点指定的名字一样. 文件的格式样式如下example:

Manifest文件 和资源文件

下面是一个简单的manifest文件及其对应的资源文件:
<manifest ...>
    <uses-feature android:name="android.hardware.usb.host" /> <uses-sdk android:minSdkVersion="12" />
    ...
    <application>
        <activity ...>
                ...
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        </intent-filter>
        <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
        </activity>
    </application>
</manifest>


在上面的manifest文件下,对应的资源文件必须保存为 res/xml/device_filter.xml,并且使用特定的属性来过滤任何USB设备:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" />
</resources>

使用USB设备

当用户将一个USB设备连接到Android设备, Android系统可以决定你的程序是否有兴趣连接这个USB设备. 若确实有, 你的程序可以和设备如愿的进行交互. 为了让系统知道我们的应用程序确实有兴趣, 你必须做到:

  1. 你可以通过意图过滤器(Intent Filter)使得当用户插入USB设备时,程序能够接受到USB设备挂载通知,或者列举出已经连接的USB设备,这样,程序就能够找到那些已连接的USB设备.
  2. 若程序还没有获得连接USB设备的权限,跟用户请求.
  3. 使用适当的接口端点进行USB数据的读写.

寻找USB设备

你的应用可以使用意图过滤器(Intent Filter)使得程序可以接收到用户USB挂载通知或者列举出那些已连接的USB设备. 如果你希望你的应用能够自动的探寻的目标设备,使用一个意图过滤器是很有用的. 如果你希望获得一个所有的已连接的设备的列表或者你的应用并没有使用意图来过滤,那么列举出所有已连接的USB设备这个方式很有用.

使用意图过滤器(Intent Filter)

为了使得你的应用能够发现某个USB设备, 你可以指定一个android.hardware.usb.action.USB_DEVICE_ATTACHED 意图来过滤设备. 指定了这个意图之后, 你需要为它指定一个包含了某个USB设备的特定属性(比如说 product-id 和 vendor-id)的资源文件. 当用户插入一个与意图过滤器符合的设备时, 系统将弹出一个包含了这些信息的对话框,来询问用户是否能够启动你的应用 ,  如果用户接受了请求,你的应用将自动有权限去访问这个USB设备,直到USB设备断开连接.

下面的例子表明了如何声明意图过滤器:

<activity ...>
    ...
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
</activity>
 

下面的例子表明了如何声明对应的指定了你所感兴趣的USB设备的资源文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="1234" product-id="5678" />
</resources>


在你的Activity 中, 你可以像下面这样获取 UsbDevice 对象,该对象代表了从意图(Intent)中检测到的设备:

UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 

 

列举USB设备

如果你的应用在运行时,想要获得所有的当前已经连接的USB设备, 可以枚举出所有挂在在IO上的设备. 使用方法 getDeviceList() 获取一个包含所有已挂载的USB设备的HashMap. 这个HashMap使用USB设备的名字作为键值,如果你想从这个HashMap获取设备.

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
...
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
UsbDevice device = deviceList.get("deviceName");

 
如果你想, 你同样也可以从这个HashMap种获取一个迭代器(iterator)来一个接一个的处理每一个设备对象 :
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
...
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
    UsbDevice device = deviceIterator.next()
    //your code
}

 

获取与设备交互的权限

在和USB设备交互的时候,应用程序必须从用户那获得交互的权限。
 

注意: 当USB设备连接的时候,如果你的应用使用意图过滤器来发现设备, 并且在应用安装的时候,用户允许你的应用处理这些事件,则应用将自动获得权限,否则, 在连接设备之前,你的应用必须明确的跟用户请求权限.

在一些情况下,明确的请求权限是必须的,比如当你的应用试图枚举已连接的USB设备并期望和其中一个交互的时候. 在应用于设备交互之前,你必须检查应用是否具有访问设备的权限. 否则的话,如果用户拒绝给予应用访问设备的权限,你将收到一个运行时错误.

为了明确获得权限,首先创建一个广播接收者(Broadcast Receiver). 当你调用方法requestPermission()的时候, 这个接收者能够得到广播, 从而监听到你的意图. 调用方法 requestPermission() 将为用户弹出对话框,以询问是否允许应用连接设备. 以下的简单的例子表明了如何创建这个广播接收者:

private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
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){
                //call method to set up device communication
            }
        }else{
            Log.d(TAG, "permission denied for device " + device);
        }
        }
    }
    }
};

 

为了注册这个广播接收者,你需要在Activity的 onCreate() 中添加如下代码:

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
...
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);registerReceiver(mUsbReceiver, filter);


为了显示对话框以询问用户是否给予应用连接设备的权限,可以调用方法requestPermission():

UsbDevice device;
...
mUsbManager.requestPermission(device, mPermissionIntent);

 
 

当用户回应对话框,你的广播接收者将接收到包含EXTRA_PERMISSION_GRANTED 的额外数据的意图, 这些额外的数据是一个代表着用户的回应的boolean值. 只有检测到这个额外的数据为true, 才有权限连接设备.

 

与设备交互

与设备交互,可以是同步的,也可以是异步的. 不管哪种情况, 你都需要创建一个新的线程,用于所有的数据传输,以致不阻塞UI主线程. 为了正确的建立与设备的交互, 你需要获得对应的UsbInterface 和 设备的 UsbEndpoint ,这个UsbEndpoint是你使用UsbDeviceConnection进行交互和发送请求的基本. 总的来说, 你的代码应该像这样:

  • 检测遍历 UsbDevice 对象的属性, 比如 product-id, vendor-id, 或者是决定你是否想要和设备交互的设备类class节点.
  • 当你确定你的应用需要和设备进行交互的时候, 找出合适的UsbInterface 以及用于和这个接口交互的合适的UsbEndpoint . 接口可以含有一个或者多个端点, 而通常情况下,都含有一个输入输入和输出的交互端点对.
  • 当找到正确的端点的时候,在这个端点上打开连接UsbDeviceConnection .
  • 在这个端点上,使用方法bulkTransfer() 或者controlTransfer() 来提供传输的数据. 你应该在另一个线程中实现这一步,从而避免阻塞UI主线程. 关于如何在Android中使用线程,请查看Processes and Threads.

下面的一小段代码,是一种简单的同步的数据传输方式. 在实际中,你的代码应该包含更多的逻辑来正确的获取到正确的交互接口和端点,而且应该在不同的线程中做数据的传输操作,而不是在UI主线程中:

private Byte[] bytesprivate static int TIMEOUT = 0;
private boolean forceClaim = true;
...
UsbInterface intf = device.getInterface(0);
UsbEndpoint endpoint = intf.getEndpoint(0);
UsbDeviceConnection connection = mUsbManager.openDevice(device);

connection.claimInterface(intf, forceClaim);
connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); 
//do in another thread




 

为了异步的发送数据, 我们使用类UsbRequest 来初始化initialize 和序列化 queue 一个异步的请求, 然后调用方法requestWait()等待请求.

更多信息请看AdbTest sample, 例中展示了如何进行大容量的异步传输, 还有例子MissleLauncher sample, 这个例子展示了如何异步的监听一个可阻断的端点。

 

中断与USB设备的交互

当完成了与设备的交互、设备断开、关闭接口UsbInterface或者连接UsbDeviceConnection调用了方法releaseInterface()和close(). 为了监听设备断开事件,我们创建一个像下面这样创建一个广播接收者:

BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
            if (device != null) {
                // call your method that cleans up and closes communication with the device
            }
        }
    }
};

 
在应用中创建,而不是在manifest文件中创建广播接收者,可以使你的应用只在应用运行的时候才处理连接断开事件. 这种方法,断开事件只被发送到当前运行的应用,而不是发送给所有的应用. 
机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景 现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。 阅读详情

相关推荐

UE5 GAS实战:从零构建一个MOBA英雄技能系统

本文详细介绍了如何利用UE5的Gameplay Ability System(GAS)构建MOBA英雄技能系统,涵盖核心组件如Ability System Component和GameplayEffect的使用,以及技能冷却、资源管理和连招系统等高级功能的实现。通过实战案例和代码示例,帮助开发者快速掌握GAS在MOBA游戏开发中的应用。

weixin_29012765的博客 526

Android开发之USB数据通信

USB

QG 1503

手把手教你用Zemax优化MTF:从‘离焦平衡球差’到高频像差控制的实战技巧

本文详细介绍了如何使用Zemax优化MTF性能,从基础设置到高级技巧的全流程。通过具体案例,讲解了如何利用离焦平衡球差提升中频MTF,以及识别和控制高频像差的方法,帮助光学设计工程师和学生有效提升成像质量。

weixin_30752699的博客 748

Android USB Host 使用详解(U盘)(三)

Android USB Host使用详解之三:U盘操作实例

Glouds的专栏 9561

4D毫米波雷达点云可视化实战:从CANFD原始数据到Matplotlib三维动态图

本文详细介绍了4D毫米波雷达点云可视化实战,从CANFD原始数据解析到Matplotlib三维动态图实现的全流程。通过解析CANFD数据帧结构、点云数据编码原理,并结合Python实现CANFD通信接口,帮助开发者掌握4D雷达数据处理与优化技巧,最终实现高性能的3D点云动态可视化。

u9v0w的博客 568

声发射传感器的工作原理是什么?

介绍声发射传感器的工作原理。

qq_39948394的博客 9246

Android USB通信(host转串口)

公司属于北斗通信行业,项目大多都需要和各式各样的硬件设备相结合来满足项目需求,因此所涉及到的各种技术也相对比较冷门。前段时间有个项目用到了一款定制 Android 设备,其中有多个接口,包括两个 USB 接口和一个 RS232 串口,需要用到其中一个 USB 连接北斗设备实现指令互通,经过摸索现在也大致了解了 Android USB(host)通信流程后续还有另一个项目则用到了 USB(accessory)有空再写一篇。在这里记录和分享一下,有错漏或可优化之处欢迎大家留言。

无 1万+

【INMP441】 MEMS麦克风,让硬件“听得见”,更要“听得清”

INMP441是一款数字MEMS麦克风,采用PDM接口输出高质量数字音频信号。相比传统模拟麦克风,它具有高度集成、抗干扰强、功耗低等优势,支持通过时钟启停实现软件控制开关。该麦克风体积小巧但功能强大,内置MEMS传感器、ADC转换器等模块,适合智能音箱、语音遥控等应用。工程师可通过ESP32等主控芯片轻松连接INMP441,利用多麦克风阵列实现波束成形等高级功能。INMP441展现了数字音频采集的先进技术,为创客和智能硬件开发者提供了优秀的音频解决方案。

深耕CV 1536

让非root用户有权限访问USB串口设备。

创建ttyUSB权限规则文件 etc/udev/rules.d/70-ttyUSB.rules KERNEL=="ttyUSB*", OWNER="root", GROUP="root", MODE="0666"

gujing001的专栏 4568

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

xiaoheshang_123的博客 268

基于Simulink的轨道交通信号控制系统仿真详细介绍

轨道交通信号控制系统是确保列车安全、高效运行的核心技术。通过Simulink进行信号控制系统的仿真,可以验证系统的设计、优化调度策略并提高安全性。以下是如何在MATLAB和Simulink中设计并仿真一个轨道交通信号控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的轨道交通信号控制系统仿真。该系统能够根据列车位置、速度和轨道状态生成控制指令,确保列车的安全、高效运行。通过虚拟场景仿真、硬件在环测试和实机测试,验证了系统的性能,并通过参数优化进一步提升了系统的可靠性。引入智能调度。

xiaoheshang_123的博客 462

让非root用户有权限访问USB设备。

转:http://blog.youkuaiyun.com/gujing001/article/details/13997437 让非root用户有权限访问USB串口设备。 创建ttyUSB权限规则文件 etc/udev/rules.d/70-ttyUSB.rules [plain] view plaincopyprint?

sfe1012 Na~喊 -- 心系一处 睥睨群雄 Blog 1553

Close-By Site Assignment,门店近邻关系在 SAP Retail 物料搜索里的真实价值

SAP零售模块中的"Close-By Site Assignment"功能常被低估,但它在门店现场业务中极为关键。该功能允许预先定义各门店间的近邻关系,当导购或店长查询商品时,系统会自动展示附近门店的库存、价格和促销信息。与单纯的地理距离不同,这种近邻关系可基于调拨频率、业务关联度等业务逻辑定义。维护入口在事务码WSD_CBP中,支持按应用场景(如销售、采购)分别设置不同近邻关系。该功能不同于组织结构,专注于增强搜索体验,特别适合多门店运营场景,能有效提升跨店查询效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4851

USB主机模式——Android

Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件)。在 USB 主机模式下,Android 设备充当主机。设备示例包括数码相机、键盘、鼠标和游戏控制器。当 Android 设备处于主机模式时,它会充当 USB 主机并为总线供电。Android 3.1(API 级别 12)或更高版本的平台直接支持 USB 配件和主机模式。

xiaopei_yan的博客 1494

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android 连接USB设备(主机模式)

Android 连接USB设备:分两种模式,主机模式、配件模式,本文主要主机模式,并同步讲解两种模式的区别,配件模式以后会更新

三杯五岳 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

安卓之USB主机(Host)与配件(Accessory)模式

安卓设备与USB硬件通讯时有两种模式可以选择:USB Host 模式与 USB Accessory 模式。从 USB 逻辑角色来说,USB Host 模式是指安卓设备作为 USB 主机,所有活动均由安卓设备发起;USB Accessory 模式是指安卓设备作为 USB 设备,由连接的 USB 硬件做 USB 主机,此时该 USB 主机也称为 USB Accessory。首先来看下,安卓官方对于这两

SoldierJazz的专栏 3580

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PC客户端与Android服务端的Socket同步通信(USB)

PC客户端与Android服务端的Socket同步通信(USB)

vrix的专栏 3652

Android USB Host的使用详解

USB Host

QG 3519

基于AOA协议实现Android设备的USB通信

摘  要: AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议。该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设备控制领域提供了条件。介绍了Android系统下USB通信的两种模式,并给出了USB配件模式下基于AOA协议实现Android手机控制步进电机的实例。 关键词: Android;AOA;USB通

tianruxishui的专栏 4万+

Android下的USB Host介绍和开发

Android下的USB Host介绍和开发 1.USB Host介绍 USB Host,中文意思是USB主模式,是相对于USB Accessory(USB副模式)来说的。如果Android工作在USB Host模式下,则连接到Android上的USB设备把Android类似的看作是一台PC机,PC机能干的事儿,Android也能干,例如将鼠标、键盘插入则可以使用键盘、鼠标来操作Andro

IT_醉仙的专栏 1714

android 做为USB HOST 监听USB外部设备连接与断开事件

androidmanifest.xml <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> java public class MainActivity extends AppCompatActivity { @Override pro

金戈铁马 1074

Android usb host模式通信示例

在以上代码中,我们首先获取了UsbManager实例,并使用getDeviceList方法获取已连接的USB设备列表。接着,我们选择了列表中的第一个设备,并使用requestPermission方法请求USB设备的权限。当使用Android设备作为USB主机时,可以使用Android提供的USB API来进行USB通信。在这个示例中,我们将发送一条消息到连接的USB设备并从USB设备接收响应。请注意,实际的USB通信可能需要更多的代码来处理各种情况,例如USB设备断开连接或传输超时等。

欢迎来到“無昂博奥”的博客 1446

Android Usb简单入门和使用

Usb简单使用和学习

weixin_41935055的博客 3830

Android 用 libusb 操作 USB 设备,无须 root

http://www.freehum.com/2014/06/operate-usb-device-under-Android-by-libusb-without-root.html  对原作者做了一定的改进 之前有段时间在 Android 下调用我们自己开发的 USB 摄像头,在 优快云 上讨论了一番,发现感兴趣的人蛮多了,不断网友发邮件来问,干脆放到博客上吧 基本思

仓仓 5993

鸿蒙so系统,鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

鸿蒙JNI开发现状现阶段,不仅鸿蒙JNI相关的开发资料较少,而且Phone相关的JNI开发资料几乎没有,这对于新入行的鸿蒙开发者们来说,非常不友好。也可能会给Android工程(使用了SO库的工程)在迁移至鸿蒙系统时造成了阻碍。案例演示废话不多说了,接下来,我们来演示鸿蒙手机版工程是如何做JNI开发的。案例1:Native项目如果开发者们只是想做简单的Native开发,并非为第三方提供SO库,这就...

weixin_39714528的博客 1566

Android的USB通信(AOA连接)

USB 主机和配件概览 Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件)。在 USB 配件模式下,外部 USB 硬件充当 USB 主机。配件示例可能包括机器人控制器、扩展坞、诊断和音乐设备、自助服务终端、读卡器等等。这样,不具备主机功能的 Android 设备就能够与 USB 硬件互动。Android USB 配件必须设计为与 Android 设备兼容,并且必须遵守 Android 配件通信协议。在

分享技术与经验的博客 9561
上一篇: WinPE下无光驱安装XP原版需要注意的几点
下一篇: NEON 技术
三打不留点
博客等级 码龄19年 21粉丝 26原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值