Android USB 设备连接的官网文档

安卓与串口通信-如何区分连接的设备? 一般来说,不管是在什么平台上需要与外接硬件交互,第一件事都是应该能够正确的识别出目标硬件。例如在 Windows 上,当一个新的外设设备被插入到我们的电脑时,系统会通过 Hardware IDs 、Compatible IDs 来确定连接的是什么设备并为其选择或安装一个合适的驱动程序以供后续使用。在获取到可用的驱动程序后 Windows 还会使用 Instance IDs 、 Device instance IDs 用于标识设备的唯一性。 阅读详情

https://developer.android.com/guide/topics/connectivity/usb/host.html

Class Description
UsbManager Allows you to enumerate and communicate with connected USB devices.
UsbDevice Represents a connected USB device and contains methods to access its identifying information, interfaces, and endpoints.
UsbInterface Represents an interface of a USB device, which defines a set of functionality for the device. A device can have one or more interfaces on which to communicate on.
UsbEndpoint Represents an interface endpoint, which is a communication channel for this interface. An interface can have one or more endpoints, and usually has input and output endpoints for two-way communication with the device.
UsbDeviceConnection Represents a connection to the device, which transfers data on endpoints. This class allows you to send data back and forth sychronously or asynchronously.
UsbRequest Represents an asynchronous request to communicate with a device through a UsbDeviceConnection.
UsbConstants Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux kernel.

In most situations, you need to use all of these classes (UsbRequest is only required if you are doing asynchronous communication) when communicating with a USB device. In general, you obtain a UsbManager to retrieve the desired UsbDevice. When you have the device, you need to find the appropriate UsbInterface and the UsbEndpoint of that interface to communicate on. Once you obtain the correct endpoint, open a UsbDeviceConnection to communicate with the USB device.

Android Manifest Requirements

The following list describes what you need to add to your application's manifest file before working with the USB host APIs:

  • Because not all Android-powered devices are guaranteed to support the USB host APIs, include a <uses-feature> element that declares that your application uses the android.hardware.usb.host feature.
  • Set the minimum SDK of the application to API Level 12 or higher. The USB host APIs are not present on earlier API levels.
  • If you want your application to be notified of an attached USB device, specify an <intent-filter> and <meta-data> element pair for the android.hardware.usb.action.USB_DEVICE_ATTACHED intent in your main activity. The <meta-data> element points to an external XML resource file that declares identifying information about the device that you want to detect.

    In the XML resource file, declare <usb-device> elements for the USB devices that you want to filter. The following list describes the attributes of <usb-device>. In general, use vendor and product ID if you want to filter for a specific device and use class, subclass, and protocol if you want to filter for a group of USB devices, such as mass storage devices or digital cameras. You can specify none or all of these attributes. Specifying no attributes matches every USB device, so only do this if your application requires it:

    • vendor-id
    • product-id
    • class
    • subclass
    • protocol (device or interface)

    Save the resource file in the res/xml/ directory. The resource file name (without the .xml extension) must be the same as the one you specified in the <meta-data> element. The format for the XML resource file is in the example below.

Manifest and resource file examples

The following example shows a sample manifest and its corresponding resource file:

<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>

In this case, the following resource file should be saved in res/xml/device_filter.xml and specifies that any USB device with the specified attributes should be filtered:

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" />
</resources>

Working with Devices

When users connect USB devices to an Android-powered device, the Android system can determine whether your application is interested in the connected device. If so, you can set up communication with the device if desired. To do this, your application has to:

  1. Discover connected USB devices by using an intent filter to be notified when the user connects a USB device or by enumerating USB devices that are already connected.
  2. Ask the user for permission to connect to the USB device, if not already obtained.
  3. Communicate with the USB device by reading and writing data on the appropriate interface endpoints.

Discovering a device

Your application can discover USB devices by either using an intent filter to be notified when the user connects a device or by enumerating USB devices that are already connected. Using an intent filter is useful if you want to be able to have your application automatically detect a desired device. Enumerating connected USB devices is useful if you want to get a list of all connected devices or if your application did not filter for an intent.

Using an intent filter

To have your application discover a particular USB device, you can specify an intent filter to filter for theandroid.hardware.usb.action.USB_DEVICE_ATTACHED intent. Along with this intent filter, you need to specify a resource file that specifies properties of the USB device, such as product and vendor ID. When users connect a device that matches your device filter, the system presents them with a dialog that asks if they want to start your application. If users accept, your application automatically has permission to access the device until the device is disconnected.

The following example shows how to declare the intent filter:

<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>

The following example shows how to declare the corresponding resource file that specifies the USB devices that you're interested in:

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <usb-device vendor-id="1234" product-id="5678" />
</resources>

In your activity, you can obtain the UsbDevice that represents the attached device from the intent like this:

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

If your application is interested in inspecting all of the USB devices currently connected while your application is running, it can enumerate devices on the bus. Use the getDeviceList() method to get a hash map of all the USB devices that are connected. The hash map is keyed by the USB device's name if you want to obtain a device from the map.

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

If desired, you can also just obtain an iterator from the hash map and process each device one by one:

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
}

Obtaining permission to communicate with a device

Before communicating with the USB device, your application must have permission from your users.

Note: If your application uses an intent filter to discover USB devices as they're connected, it automatically receives permission if the user allows your application to handle the intent. If not, you must request permission explicitly in your application before connecting to the device.

Explicitly asking for permission might be neccessary in some situations such as when your application enumerates USB devices that are already connected and then wants to communicate with one. You must check for permission to access a device before trying to communicate with it. If not, you will receive a runtime error if the user denied permission to access the device.

To explicitly obtain permission, first create a broadcast receiver. This receiver listens for the intent that gets broadcast when you call requestPermission(). The call to requestPermission() displays a dialog to the user asking for permission to connect to the device. The following sample code shows how to create the broadcast receiver:

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);
                }
            }
        }
    }
};

To register the broadcast receiver, add this in your onCreate() method in your activity:

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);

To display the dialog that asks users for permission to connect to the device, call the requestPermission() method:

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

When users reply to the dialog, your broadcast receiver receives the intent that contains the EXTRA_PERMISSION_GRANTED extra, which is a boolean representing the answer. Check this extra for a value of true before connecting to the device.

Communicating with a device

Communication with a USB device can be either synchronous or asynchronous. In either case, you should create a new thread on which to carry out all data transmissions, so you don't block the UI thread. To properly set up communication with a device, you need to obtain the appropriate UsbInterface and UsbEndpoint of the device that you want to communicate on and send requests on this endpoint with aUsbDeviceConnection. In general, your code should:

  • Check a UsbDevice object's attributes, such as product ID, vendor ID, or device class to figure out whether or not you want to communicate with the device.
  • When you are certain that you want to communicate with the device, find the appropriate UsbInterface that you want to use to communicate along with the appropriate UsbEndpoint of that interface. Interfaces can have one or more endpoints, and commonly will have an input and output endpoint for two-way communication.
  • When you find the correct endpoint, open a UsbDeviceConnection on that endpoint.
  • Supply the data that you want to transmit on the endpoint with the bulkTransfer() or controlTransfer() method. You should carry out this step in another thread to prevent blocking the main UI thread. For more information about using threads in Android, seeProcesses and Threads.

The following code snippet is a trivial way to do a synchronous data transfer. Your code should have more logic to correctly find the correct interface and endpoints to communicate on and also should do any transferring of data in a different thread than the main UI thread:

private Byte[] bytes;
private 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

To send data asynchronously, use the UsbRequest class to initialize and queue an asynchronous request, then wait for the result withrequestWait().

For more information, see the AdbTest sample, which shows how to do asynchronous bulk transfers, and the MissileLauncher sample, which shows how to listen on an interrupt endpoint asynchronously.

Terminating communication with a device

When you are done communicating with a device or if the device was detached, close the UsbInterface and UsbDeviceConnection by callingreleaseInterface() and close(). To listen for detached events, create a broadcast receiver like below:

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
            }
        }
    }
};

Creating the broadcast receiver within the application, and not the manifest, allows your application to only handle detached events while it is running. This way, detached events are only sent to the application that is currently running and not broadcast to all applications.

Android---ADB工具连接真实手机(有线连接与无线连接) 前言 ADB连接手机进行调试有两种方式,一种使用USB线连接,一种使用无线WiFi连接。 通过USB线连接 电脑通过USB线连接手机 手机开启USB调试模式,开启手机开发者模式 以小米手机为例:连续点击7次MIUI系统(设置–>我的设备–>全部参数) — 其它手机自行百度 安装安卓驱动 通过ADBDriverInstall安装 在ADB官网上下载ADBDriverInstall安装包 ADB官网下载地址:https://adbdriver.com/downloads/ 阅读详情

相关推荐

Android Service创建USB HOST通信

之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信。要使用Android的USB Host功能,首先你需要确定你的平板(手机)设备是否支持USB Host的功能,你可以从手机开发商的简介里面看到,这个功能是由CPU直接关联的,和软件没有关系,所以,你可以把你的外设模块插进去你的Androi

caoyicheng1的专栏 5万+

Android的USB通信 (AOA Android开放配件协议)

Android AOA

idward307的专栏 1482

安卓APP通过CH340实现USB串口通信与设备检测

本文详细介绍了安卓APP通过CH340芯片实现USB串口通信与设备检测的完整流程。从CH340芯片的基础原理到开发环境搭建,再到串口通信的具体实现和错误处理,提供了全面的技术指导。文章还分享了USB热插拔处理、自动重连策略以及性能优化等实战技巧,帮助开发者高效完成安卓与嵌入式设备的通信开发。

weixin_42531925的博客 380

Android Usb简单入门和使用

Usb简单使用和学习

weixin_41935055的博客 3830

解决Android USB连接问题与OpenCV开发环境搭建

本文首先介绍了排查Android设备与Eclipse连接问题的方法,包括使用ADB命令检查USB连接,以及在不同操作系统中解决连接问题的特定步骤。接着,文章阐述了如何找到OpenCV的文档和资源,以及如何加入OpenCV社区获得帮助。最后,通过构建一个简单的照片捕捉应用程序,展示了如何将OpenCV与Android SDK结合使用,以及如何设计应用程序的界面和功能。

weixin_30598047的博客 1081

FLoRA: 基于异构低秩适应的联邦微调大语言模型

大语言模型(LLMs)的快速发展推动了人工智能的进步,预训练的LLMs可以通过微调适应各种下游任务。联邦学习(FL)通过利用客户端的本地数据进行原位计算,进一步增强了隐私保护的微调,消除了数据移动的需求。然而,考虑到LLMs的巨大参数量,微调LLMs对于资源受限且异构的FL客户端来说是一个挑战。之前的方法采用了低秩适应(LoRA)进行高效的联邦微调,但在LoRA适配器上使用了传统的FL聚合策略。这些方法导致了数学上不准确的聚合噪声,降低了微调效果,并且未能解决异构LoRA的问题。

tiger00O的博客 2065

Android USB通信(host转串口)

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

无 1万+

学好超几何分布的核心公式,破解双色球!

彩票本质是概率游戏,不存在"必中公式"科学投注的核心是风险收益比管理长期投注的期望值始终为负(理论回报率约47%-63%)数学维度:运用概率工具优化策略经济维度:控制投注成本在可承受范围人文维度:将彩票视为社会公益的参与方式通过本文构建的数学模型,彩民可以在概率框架内实现更理性的投注决策。但最终能否收获幸运,仍取决于那个永恒的未知数——概率女神的眷顾。一、超几何分布的核心公式。

weixin_44904675的博客 1万+

Android USB相关流程解析(android4.4)

前言: 对于USB的一些常量属性,比如:UsbManager. USB_FUNCTION_RNDIS等,现在也是一个比较模糊的概念,只能具体问题具体分析,我们重点说的是类结构,与USB整个框架(仅限于framework层)的逻辑。本来想画一张流程图呢。画来画去好像都跟实际情况有出入。就只能用文字叙述了。 一、调用: 我们从最常见与USB相关的界面说起。当手机连接电脑时,有如下界面:

daweibalang717的专栏 9769

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 682

二、基于C语言的JPEG解码代码详解

// JPEG解码 // 输入JPEG后输出Bitmap #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) unsigned int BuffIndex; // JPEG数据的位置 unsigned int BuffSize; // JPEG数据的大小 unsigned int BuffX; // 图像的横向尺寸 unsigned int BuffY; //

m0_37633745的博客 4455

USB 主机概览

原文:https://developer.android.com/guide/topics/connectivity/usb/host USB 主机概览 当您的 Android 设备处于 USB 主机模式时,它会充当 USB 主机,为总线供电并枚举连接的 USB 设备。Android 3.1 及更高版本支持 USB 主机模式。 API 概览 在开始前,请务必了解您需要使用的类。下表介绍了...

博客 837

Cadence安装

选择刚刚解压的E盘DVD驱动中的setup.exe文件,安装路径推荐D盘,此处会自己给你新建文件夹,我们无需手动建文件夹。但是,新产品有一些BUG(影响使用流畅性),所以我们要对17.4打补丁,补丁包同样去吴川斌的博客下载。下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装包,链接同上。记录一下安装过程,方便以后安装使用Cadence。破解完成后,建议将这两个软件创建快捷方式到桌面。到这里,我们已经可以正常的使用Cadence了。对光盘映像文件解压后双击,可以在我的电脑看到。

电子那些事儿 1万+

安卓USB例程:从安卓官方源码开始建立工程

前言 首先参考官方文档(中文):https://developer.android.google.cn/guide/topics/connectivity/usb 下载最新版的 Android Studio ,然后按照官网的教程,从零开始建立一个工程即可。 下载例程 在官网上下载一个蓝牙例程: https://developer.android.google.cn/samples 即: https://github.com/androidthings/sample-usbenum/.

230

STM32F4 Flash数据的保存和读取。

STM32F4 Flash数据的保存和读取。

张一西的博客 9216

【DaVinci Developer专题】-8-创建一个枚举Enum ADT(Application Data Type)

目录 1 创建一个枚举Value ADT(Application Data Type) 1.1 命名application data type 1.2 创建一个computation method计算方法属性 1.3 创建一个Contraint约束条件属性 2 创建了一个新的Type Mapping Sets 3 创建了一个S/R Port Interface 4 SWC引用Type Mapping set 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录-

「汽车电子助手」的博客 2292

安卓使用usb连接外设

# Android_USB #### 介绍 安卓通过usb连接硬件设备 #### 软件架构 Android Studio 4.1.2 #### 使用说明 1. 权限 在main添加 <uses-feature android:name="android.hardware.usb.host" android:required="true" /> 2. 判断是否支持usb.host(比如chromeOS系统的电脑可以正常运行apk,apk可以用蓝牙但是.

qq_32666701的博客 1057

RT-DERT安卓部署教程

这个文档中的代码案例,实现了拍照和选图识别,两个功能,可以看效果图。UI做了美化:显示类别机和数量。代码下载地址:通过网盘分享的文件:android_rtdert.zip链接: https://pan.baidu.com/s/1k6e-d_lov1OPgUmit5i_cA?pwd=hpfi 提取码: hpfi–来自百度网盘超级会员v8的分享。

AIOT魔法师 196

Airtest IDE 自动化测试2 - 安装与启动 Android模拟器

前言 windows 环境准备: 雷电模拟器,下载最新版:v4.0 AirtestIDE: v1.2.9 下载安装 官网下载地址http://airtest.netease.com/changelog.html [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fb0euere-1622124058229)(https://img2020.cnblogs.com/blog/1070438/202105/1070438-20210519213005413-1225467461.pn

qq_27371025的博客 686

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Android】搭配安卓环境及设备连接

摘要:本文介绍了Android开发的基础知识,包括系统架构分层(Linux内核、HAL层、C/C++库、Java API封装)、开发环境搭建(Android Studio安装与Gradle配置)、模拟器创建及真机调试方法。作者分享了初次创建Android项目并运行"Hello World"程序的经历,同时记录了环境配置中可能遇到的Gradle下载问题和解决方案。文章还详细说明了如何开启手机开发者模式进行USB调试。作为Android开发学习笔记的开篇,作者表达了系统梳理知识体系的决心。

阿华的博客 969

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

安卓 ADT+Eclipse+USB连接手机进行调试程序

安卓 ADT+Eclipse+USB连接手机进行调试程序 一、简述        记--安卓 ADT+Eclipse+USB连接手机进行调试程序。        ADT版本        二、步骤 1、手机开启USB调试模式       红米1S手机开启方式:"设置"--》关于手机--》点击"MIUI版本"多次  ====&gt;在设置-其他高级设置下面多出"开发者选项"     ...

Genven_Liang的博客 3486

usb线连接android设备连接不上,安卓手机USB数据线连接不上电脑怎么办

安卓手机USB数据线连接不上电脑怎么办在生活中,有很多人在使用安卓手机。那么安卓手机USB数据线连接不上电脑怎么办呢?下面就让jy135小编来告诉大家吧,欢迎阅读。1、手机USB连不上电脑可能是因为手机没安装驱动,可以下载安装驱动软件。2、手机USB连不上电脑的`解决方法不用安装任何东西,你把手机连接电脑后,点击手机设置——应用程序——开发者选项(USB模式)——USB调试打钩,手机有个“打开US...

weixin_35715440的博客 2568

android usb host 读写USB设备

自android3.1以后android增加了操作USB设备的API。 官网地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 网上也有很多这方面的文章,不过多数是介绍如何得到设备和获取权限的,很少有介绍如何读写数据的。 最近也研究了在android下如何读写USB设备,和大家分享一下。 关于如何监听

Central-Perk的专栏 5万+

【ADB】如何通过 ADB 连接安卓设备(USB + 无线 TCP/IP)

本篇教程手把手教你 ADB 工具下载、环境配置,零基础搞定安卓设备USB 连接 + TCP/IP 无线 ADB 连接,步骤清晰、实操性强,还附上常用 ADB 命令,帮你快速打通 PC 与安卓设备的调试通道。

Super_Fisher_man的博客 510

如何用Qt写一个安卓Android应用

至此环境就搭建好了,宝子们就可以掏出你Android系统的手坤用数据线连接电脑了,然后打开你手机的设置,找到关于本机,再然后连点几下版本号让手机处于开发者模式 ,在开发者选项中打开USB调试就OK啦。这里就可以绑定SDJ,NDK,JDK的路径了,JDK的路径会自动绑定你下载的,如果不是也很好找,一般就在C:\program Files(x86)\Java这个目录下。中间会让你选择安装目录,选择安装到你空间比较充足的地方就好了,比较简单就不放图了。

qq_59840326的博客 1万+

联想拯救者Y7000P上使用ADB无法监听到通过USB连接的安卓设备

摘要:联想拯救者Y7000P笔记本通过USB连接安卓设备时,ADB无法识别设备。排查发现,当手机保持默认"仅充电"模式时ADB可正常连接,而切换为"传输文件(MTP)"模式后反而失效。尽管未找到根本原因(可能与USB电源管理或协议冲突有关),但确认临时解决方案为:连接后不切换USB模式,保持"仅充电"状态即可使用ADB调试。若需文件传输,可改用无线ADB方式。该案例说明硬件兼容性问题可能导致非常规故障现象。(149字)

seabirdssss的博客 588
上一篇: Android 双卡双待发送短信
下一篇: Android USB 通讯相关的
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值