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方式 获取

相关推荐
- 羊羊不超越 -11 分钟前
App渠道来源追踪方案全面分析(iOS/Android/鸿蒙)
android·ios·harmonyos
杨荧17 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰24 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT36 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。38 分钟前
c++多线程
java·开发语言
小政爱学习!40 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
wk灬丨1 小时前
Android Kotlin Flow 冷流 热流
android·kotlin·flow
千雅爸爸1 小时前
Android MVVM demo(使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成)
android
k09331 小时前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长