You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 6.7开发Android Messenger:如何与其他应用交互及调用系统功能

替代AndroidJNI的Qt Android交互方案

一、复用Qt Android Extras模块

Qt6.7的AndroidJniObject并未被移除,只是官方文档说明不全。你可以直接沿用旧逻辑,注意Qt6的模块引入方式即可:

  • 在CMakeLists.txt中添加依赖:
    find_package(Qt6 REQUIRED COMPONENTS AndroidExtras)
    target_link_libraries(your_app_name PRIVATE Qt6::AndroidExtras)
    
  • 代码中引入头文件并调用:
    #include <QtAndroidExtras/QtAndroidExtras>
    
    // 获取上下文并调用ContentResolver查询联系人
    QAndroidJniObject context = QtAndroid::androidContext();
    QAndroidJniObject contentResolver = context.callObjectMethod(
        "getContentResolver", "()Landroid/content/ContentResolver;"
    );
    // 后续按Java层逻辑查询联系人数据即可
    

核心API和Qt5时期差异不大,可参考Qt6早期版本的AndroidExtras文档补全细节。

二、封装QML原生扩展

如果更偏向QML层调用,可通过自定义插件封装Android原生逻辑:

  • 编写Java类继承QtActivity,实现联系人查询、相机调用等原生方法
  • 通过JNI注册将Java方法暴露给C++层
  • 在C++中注册QML类型,让QML直接调用封装好的功能

三、用Intent调用系统应用

对于相机、联系人这类系统功能,无需自己实现全量逻辑,直接调用系统应用即可:

  • 获取联系人:启动系统联系人选择器,回调中获取结果
    QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V",
                            QAndroidJniObject::fromString("android.intent.action.PICK").object<jstring>());
    intent.callObjectMethod("setType", "(Ljava/lang/String;)Landroid/content/Intent;",
                           QAndroidJniObject::fromString("vnd.android.cursor.dir/phone_v2").object<jstring>());
    
    QtAndroid::startActivity(intent.object<jobject>(), 1001, [](int resultCode, const QAndroidJniObject &data) {
        if (resultCode == QtAndroid::ActivityResultOk) {
            QAndroidJniObject uri = data.callObjectMethod("getData", "()Landroid/net/Uri;");
            // 解析uri中的联系人信息
        }
    });
    
  • 相机/麦克风:通过Intent调用系统相机拍照/录制,直接获取返回的媒体文件路径

四、补充参考资源

除了你已查阅的文档,还可以重点看这些内容:

  • Qt6的Android Native Interface文档,聚焦JNI交互底层逻辑
  • Qt Creator示例库中的Android Contacts示例,直接参考适配Qt6的实现
  • Qt社区论坛的Qt6 Android交互讨论,很多开发者分享了踩坑后的适配方案

内容的提问来源于stack exchange,提问作者TheBlackSwan994

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:13