Qt for android 获取USB设备列表(二)JNI方式 获取

简介

基于上篇 [Qt for android 获取USB设备列表(一)Java方式 获取], 这篇就纯粹多了, 直接将上篇代码转换成JNI方式即可。即所有的设备连接与上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850)

关键代码

cpp 复制代码
void MainWindow::getDeviceList()
{
    QJniObject usbService = QJniObject::getStaticObjectField("android/content/Context",
                                                            "USB_SERVICE",
                                                            "Ljava/lang/String;");
    if (!usbService.isValid())
    {
        logger("fail to get usb service");
        return;
    }


    QJniObject activity = QJniObject(QNativeInterface::QAndroidApplication::context());

    QJniObject usbManager = activity.callObjectMethod("getSystemService",
                                                      "(Ljava/lang/String;)Ljava/lang/Object;",
                                                      usbService.object<jstring>());
    if (!usbManager.isValid())
    {
        logger("fail to get usb manager");
        return;
    }

    QJniObject usbDeviceListHashMap = usbManager.callObjectMethod("getDeviceList",
                                                           "()Ljava/util/HashMap;");
    QJniObject devListKeySet = usbDeviceListHashMap.callObjectMethod("keySet",
                                                       "()Ljava/util/Set;");
    QJniObject devListIter = devListKeySet.callObjectMethod("iterator",
                                                       "()Ljava/util/Iterator;");
    jint devListSize = usbDeviceListHashMap.callMethod<jint>("size", "()I");

    QJniObject usbDevObj;
    QJniObject usbDevObjIter;
    int vid = 0, pid = 0;
    QString devName;
    for (int i = 0; i < devListSize; ++i)
    {
        usbDevObjIter = devListIter.callObjectMethod("next",
                                            "()Ljava/lang/Object;");
        usbDevObj = usbDeviceListHashMap.callObjectMethod("get",
                                                   "(Ljava/lang/Object;)Ljava/lang/Object;",
                                                   usbDevObjIter.object());
        vid = usbDevObj.callMethod<jint>("getVendorId", "()I");
        pid = usbDevObj.callMethod<jint>("getProductId", "()I");
        devName = usbDevObj.callMethod<jstring>("getDeviceName", "()Ljava/lang/String;").toString();

        logger(QString("Name: %1, VID: %2, PID: %3").arg(devName).arg(vid).arg(pid));
    }

}

展示

其他

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

相关推荐
北冥湖畔的燕雀1 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
2501_915918411 小时前
掌握 iOS 26 App 运行状况,多工具协作下的监控策略
android·ios·小程序·https·uni-app·iphone·webview
QX_hao3 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白3 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
2501_915909064 小时前
iOS 混淆实战,多工具组合完成 IPA 混淆与加固(源码 + 成品 + 运维一体化方案)
android·运维·ios·小程序·uni-app·iphone·webview
Evand J5 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
Larry_Yanan5 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
爱喝白开水a5 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway6 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器