Qt for android 获取USB设备列表(一)Java方式 获取

简介

QtActivity 作为 Qt 应用程序的入口点,负责启动和配置 Qt 应用程序的信息, 后面我们继承 QtActivity 做自定义控制,了解一下 Activity 生命周期概念, 因为 QtActivity 继承自Android的activity,使用周期函数完成我们的任务。

步骤

1. 获取UsbManager

参考 UsbManager(apiref.com), 通过下面代码获取USB服务
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

2. 获取getDeviceList

UsbManager 对象接口中, 我们使用如下代码获取usb设备列表 HashMap<String, UsbDevice> getDeviceList()

3. UsbDevice

UsbDevice接口如下, 打印设备的PID、VID、SN等基本信息即可
接口参考文档 USBDevice 接口说明文档

<class name="android/hardware/usb/UsbDevice" since="12"><extends name="java/lang/Object"/><implements name="android/os/Parcelable"/><method name="getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;" since="21"/><method name="getConfigurationCount()I" since="21"/><method name="getDeviceClass()I"/><method name="getDeviceId()I"/><method name="getDeviceId(Ljava/lang/String;)I"/><method name="getDeviceName()Ljava/lang/String;"/><method name="getDeviceName(I)Ljava/lang/String;"/><method name="getDeviceProtocol()I"/><method name="getDeviceSubclass()I"/><method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/><method name="getInterfaceCount()I"/><method name="getManufacturerName()Ljava/lang/String;" since="21"/><method name="getProductId()I"/><method name="getProductName()Ljava/lang/String;" since="21"/><method name="getSerialNumber()Ljava/lang/String;" since="21"/><method name="getVendorId()I"/><method name="getVersion()Ljava/lang/String;" since="23"/><field name="CREATOR"/></class>

4. 代码

package usb;import java.util.HashMap;
import android.os.Bundle;
import android.content.Context;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbDevice;public class USBListActivity extends org.qtproject.qt.android.bindings.QtActivity
{private UsbManager m_usbManager;public USBListActivity(){}@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);m_usbManager = (UsbManager)getSystemService(Context.USB_SERVICE);getDeviceList();}public void getDeviceList(){HashMap<String, UsbDevice> deviceList = m_usbManager.getDeviceList();System.out.println("------------------------->GetDeviceList<-------------------------");deviceList.forEach((key, value) -> {System.out.println("------------------------->" + key + "<-------------------------");System.out.println(value);System.out.println("<-------------------------" + key + "------------------------->");});System.out.println("<-------------------------GetDeviceList------------------------->");}
}

5. 设置你的代码为启动入口

编辑 AndroidManifest.xml, 将
android:name=“org.qtproject.qt.android.bindings.QtActivity”
改为
android:name=“usb.USBListActivity”
代码目录如下
在这里插入图片描述

6. 收集设备连接

我使用OTG线连接了USB扩展线, 在扩展上接了两个同样型号的USB转TTL线, 如下图
在这里插入图片描述

7. 运行结果

I System.out: ------------------------->GetDeviceList<-------------------------
I System.out: ------------------------->/dev/bus/usb/001/008<-------------------------
I System.out: UsbDevice[mName=/dev/bus/usb/001/008,mVendorId=6790,mProductId=29987,mClass=255,mSubclass=0,mProtocol=0,mManufacturerName=null,mProductName=USB2.0-Serial,mVersion=2.54,mSerialNumberReader=android.hardware.usb.IUsbSerialReader S t u b Stub StubProxy@a1e1d4b, mHasAudioPlayback=false, mHasAudioCapture=false, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[
I System.out: UsbConfiguration[mId=1,mName=null,mAttributes=128,mMaxPower=48,mInterfaces=[
I System.out: UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=255,mSubclass=1,mProtocol=2,mEndpoints=[
I System.out: UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=32,mInterval=0]
I System.out: UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=32,mInterval=0]
I System.out: UsbEndpoint[mAddress=129,mAttributes=3,mMaxPacketSize=8,mInterval=1]]]]
I System.out: <-------------------------/dev/bus/usb/001/008------------------------->
I System.out: ------------------------->/dev/bus/usb/001/007<-------------------------
I System.out: UsbDevice[mName=/dev/bus/usb/001/007,mVendorId=6790,mProductId=29987,mClass=255,mSubclass=0,mProtocol=0,mManufacturerName=null,mProductName=USB2.0-Serial,mVersion=2.54,mSerialNumberReader=android.hardware.usb.IUsbSerialReader S t u b Stub StubProxy@ec18328, mHasAudioPlayback=false, mHasAudioCapture=false, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[
I System.out: UsbConfiguration[mId=1,mName=null,mAttributes=128,mMaxPower=48,mInterfaces=[
I System.out: UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=255,mSubclass=1,mProtocol=2,mEndpoints=[
I System.out: UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=32,mInterval=0]
I System.out: UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=32,mInterval=0]
I System.out: UsbEndpoint[mAddress=129,mAttributes=3,mMaxPacketSize=8,mInterval=1]]]]
I System.out: <-------------------------/dev/bus/usb/001/007------------------------->
I System.out: <-------------------------GetDeviceList------------------------->

在这里插入图片描述


andoid开发文档

UsbManager(apiref.com)

UsbManager android-doc.com

UsbManager(matools.com)

Activity 生命周期概念


Qt for android 错误处理

Qt for Android 乱码问题


其他

Qt for android 文档(thinkinginqt.com)

Qt for android 官方文档(Qt6.2LTS)

Qt Project to Manifest Configuration

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8新特性——函数式编程详解

目录 一 概述1.1 背景1.2 函数式编程的意义1.3 函数式编程的发展 Lambda表达式1.1 介绍1.2 使用Lambda的好处1.3 Lambda方法1.3.1 Lambda表达式结构1.3.2 Lambda表达式的特征 1.4 Lambda的使用1.4.1 定义函数式接口1.4.2 Lambda表达式实现函数式接口1.4.3 简化Lambda表达式1.4.…

C++学习/复习4--与类相关的概念/默认成员函数/运算符重载/Date类实现案例

一、类和对象 1.本章概要 2.C中的结构体(struct与class) 升级为类 &#xff08;1&#xff09;类及成员函数的两种定义方式 声明与定义分离 &#xff08;2&#xff09;权限 注意1&#xff1a;struct/class在权限上的区别 &#xff08;3&#xff09;封装 &#xff08;4&#x…

AI学习指南数学工具篇-凸优化之对偶性与拉格朗日对偶

AI学习指南数学工具篇-凸优化之对偶性与拉格朗日对偶 在凸优化中&#xff0c;对偶性是一个非常重要的概念。通过对偶性&#xff0c;我们可以将原始问题转化为对偶问题&#xff0c;从而更容易求解。其中&#xff0c;拉格朗日对偶问题是对偶性的一个重要应用&#xff0c;通过拉格…

《Ai学习笔记》自然语言处理 (Natural Language Processing):机器阅读理解-基础概念解析01

自然语言处理 (Natural Language Processing)&#xff1a; NLP四大基本任务 序列标注&#xff1a; 分词、词性标注 分类任务&#xff1a; 文本分类、情感分析 句子关系&#xff1a;问答系统、对话系统 生成任务&#xff1a;机器翻译、文章摘要 机器阅读理解的定义 Machi…

LangChain - 建立代理

本文翻译整理自&#xff1a;Build an Agent https://python.langchain.com/v0.2/docs/tutorials/agents/ 文章目录 一、说明概念 二、定义工具1、TavilyAPI参考&#xff1a; 2、RetrieverAPI参考&#xff1a;API参考&#xff1a; 3、工具 三、使用语言模型四、创建代理五、运行…

《安富莱嵌入式周报》第337期:超高性能信号量测量,协议分析的开源工具且核心算法开源,工业安全应用的双通道数字I/O模组,低成本脑机接口,开源音频合成器

周报汇总地址&#xff1a;http://www.armbbs.cn/forum.php?modforumdisplay&fid12&filtertypeid&typeid104 视频版&#xff1a; https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1PT421S7TR/ 《安富莱嵌入式周报》第337期&#xff1a;超高性…

【Spring Boot】分层开发 Web 应用程序(含实例)

分层开发 Web 应用程序 1.应用程序分层开发模式&#xff1a;MVC1.1 了解 MVC 模式1.2 MVC 和三层架构的关系 2.视图技术 Thymeleaf3.使用控制器3.1 常用注解3.1.1 Controller3.1.2 RestController3.1.3 RequestMapping3.1.4 PathVariable 3.2 将 URL 映射到方法3.3 在方法中使用…

用户数据报协议UDP实现可靠传输的思路

一、UDP协议的特点 按照报文来分割发送。不需要建立连接和维护连接。不需要接收确认。速度较快。不确保接收的顺序和发送顺序一样。 二、用UDP实现可靠通信的思路 (一)接收时发送一个确认报文 实现接收确认的机制。 (二)每个报文腾出空间放置序号 发送时设置序号&#xff0c…

如何安装虚拟机Wmware,并且在虚拟机中使用centos系统

1. 前言 大家好&#xff0c;我是jiaoxingk 本篇文章主要讲解如何安装虚拟机&#xff0c;并且在虚拟机中安装centos系统&#xff0c;让windows电脑也能够使用Linux系统 2. 虚拟机的介绍 在安装Vmware之前&#xff0c;我们先做虚拟机的介绍 虚拟机&#xff1a;通过软件虚拟出来的…

Docker拉取镜像报错:x509: certificate has expired or is not yet v..

太久没有使用docker进行镜像拉取&#xff0c;今天使用docker-compose拉取mongo发现报错&#xff08;如下图&#xff09;&#xff1a; 报错信息翻译&#xff1a;证书已过期或尚未有效。 解决办法&#xff1a; 1.一般都是证书问题或者系统时间问题导致&#xff0c;可以先执行 da…

用HAL库改写江科大的stm32入门例子-6-2 定时器外部时钟

实验目的&#xff1a; 熟悉外部时钟的应用。 实验步骤&#xff1a; 创建项目参照前面的文章&#xff0c;集成oled(没有oled,用uart串口传递也可以)选择外部时钟源时钟源参数设置编写代码&#xff1a; 5.1声明全局变量&#xff0c;如果发生定时器中断的时候&#xff0c;在回调…

SW 零件插入零件的重合配合

重合配合有时候会失效,可以先用距离配合代替,之后修改距离尽量接近

AI网络爬虫-自动获取百度实时热搜榜

工作任务和目标&#xff1a;自动获取百度实时热搜榜的标题和热搜指数 标题&#xff1a;<div class"c-single-text-ellipsis"> 东部战区台岛战巡演练模拟动画 <!--48--></div> <div class"hot-index_1Bl1a"> 4946724 </div> …

【bash】统计服务器信息脚本

起因 写一个bash脚本统计服务器的机器名、内网IP、CPU使用率、内存使用率、List{GPU使用率、显存} 脚本 #!/bin/bash# 主机名 hostname$(hostname) # 内网ip ip$(ip addr | grep inet | grep -v 127.0.0.1 | awk {print $2} | cut -d/ -f1) ip$(echo "$ip"|tr \n…

Excel表格在线解密:轻松解密密码,快速恢复数据

忘记了excel表格密码&#xff1f;教你简单两步走&#xff1a;具体步骤如下。首先&#xff0c;在百度搜索中键入“密码帝官网”。其次&#xff0c;点击“立即开始”&#xff0c;在用户中心上传表格文件即可找回密码。这种方法不用下载软件&#xff0c;操作简单易行&#xff0c;适…

【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化+完美使用

模版介绍 【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化完美使用 腾讯官方出品discuz论坛DIY的后台设置&#xff0c;功能齐全&#xff0c;论坛功能不亚于葫芦侠&#xff0c;自定义马甲&#xff0c;自定义认证&#xff0c;自定义广告&#xff0c;完全可以打造出自己想…

元本学堂是什么?杜旭东疑似再翻车!

杜旭东&#xff0c;1956年1月7日出生于中国北京市&#xff0c;毕业于解放军艺术学院&#xff0c;中国内地男演员、国家一级演员&#xff01; 2023年11月17日晚&#xff0c;杜旭东在其个人社交媒体上发布视频&#xff0c;就其以前给缅北电诈集团的白家成员录制庆生视频一事道歉…

C++11std::bind的简单使用

std::bind用来将可调用对象与其参数一起进行绑定&#xff0c;绑定后的结果可以用std::function&#xff08;可调用对象包装器&#xff09;进行保存&#xff0c;并延迟调用到任何我们需要的时候。 通俗来讲&#xff0c;它主要有两大作用&#xff1a; &#xff08;1&#xff09…

每日一题Cat, Fox and the Lonely Array

文章目录 题名&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a; 题名&#xff1a; Cat, Fox and the Lonely Array 题意&#xff1a; 给定一个数组a&#xff0c;求出最小的k&#xff0c;满足数组每个长度为k的连续子数组元素按位或答案都相等。 题解&#xf…