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

相关推荐
小僧景贤6 分钟前
嵌入式C语言 第十一篇:成长路线|嵌入式C工程师完整进阶学习路径(从零到工程级落地|含周期+实战项目)
c语言·开发语言·学习
哆啦A梦z7 分钟前
Android BLE 实战:从小米手环 7 踩坑到完整连接框架
android
Brilliantwxx10 分钟前
【Linux】自动化构建工具 make 与 Makefile
linux·运维·服务器·开发语言·自动化
灵晔君23 分钟前
【Linux】进程(四)——进程虚拟地址空间
linux·c语言·开发语言
萧瑟余晖27 分钟前
Java深入解析篇十八之响应式编程
java·开发语言
看浪的路人31 分钟前
第5讲:代码审查与 Bug 检测
开发语言·windows·python
netccdn34 分钟前
Hough变换检测直线(Matlab)
开发语言·计算机视觉·matlab
有点。39 分钟前
C++深度优先搜索(三)
开发语言·c++·深度优先
天空'之城41 分钟前
C 语言工业级通用组件手写 25:简易日志系统
c语言·开发语言·日志系统·嵌入式调试·调试打印
笑一下蒜了.1 小时前
Linux 存储多路径访问手册|multipath.conf 各配置段详解
android·linux·运维