首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt for Android -未定义对ANativeWindow_fromSurface的引用

Qt for Android -未定义对ANativeWindow_fromSurface的引用
EN

Stack Overflow用户
提问于 2017-04-26 12:03:35
回答 2查看 967关注 0票数 3

我是Qt的初学者,

我试着用Qt做一个Android应用,用GStreamer(而不是QtGStreamer)通过RTSP传输视频。

但是当我使用

代码语言:javascript
复制
QPlatformNativeInterface *nativeInterface = QApplication::platformNativeInterface();
jobject activity = (jobject)nativeInterface->nativeResourceForIntegration("QtActivity");
QAndroidJniEnvironment * qjniEnv;
JNIEnv * jniEnv;
JavaVM * jvm = qjniEnv->javaVM();
jvm->GetEnv(reinterpret_cast<void**>(&qjniEnv), JNI_VERSION_1_6);
jvm->AttachCurrentThread(&jniEnv,NULL);

jint r_id_content = QAndroidJniObject::getStaticField<jint>("android/R$id", "content");

QAndroidJniObject view = ((QAndroidJniObject) activity).callObjectMethod("findViewById", "(I)Landroid/view/View;", r_id_content);
if (view.isValid()) {
    QAndroidJniObject child1 = view.callObjectMethod("getChildAt", "(I)Landroid/view/View;", 0);
    QAndroidJniObject child2 = child1.callObjectMethod("getChildAt", "(I)Landroid/view/View;", 0);
    if (child2.isValid()) {
        QAndroidJniObject sHolder = child2.callObjectMethod("getHolder","()Landroid/view/SurfaceHolder;");
        if (sHolder.isValid()) {
            QAndroidJniObject theSurface = sHolder.callObjectMethod("getSurface","()Landroid/view/Surface;");
            if (theSurface.isValid()) {
                ANativeWindow* awindow = ANativeWindow_fromSurface(jniEnv, theSurface.object());
                qDebug() << "This is a ANativeWindow " << awindow;
            }
        }
    } else {
        qDebug() << "Views are not loaded yet or you are not in the Qt UI Thread";
    }
}

为了得到ANativeWindow,

它收到一个错误:undefined reference to 'ANativeWindow_fromSurface'

我已经在.pro中添加了QT += androidextras

#include<android/native_window.h>

#include<android/native_window_jni.h>

在.cpp文件中,我不知道我还应该做什么。

有没有人能帮我解决这个问题?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-05-15 17:19:08

我在*.pro文件中添加了LIBS += -landroid。所以,它是有效的。

票数 1
EN

Stack Overflow用户

发布于 2019-12-16 14:45:00

我使用QtAndroid::androidActivity()和callMethod,callObjectMethod。

我补充说:

代码语言:javascript
复制
android {

QT += core_private gui_private androidextras

定义+= Q_OS_ANDROID \ HAVE_TIME_H \ HAVE_SYS_SELECT_H \ HAVE_LRAND48 \ HAVE_NETINET_IN_H }

到.pro文件,所以,它的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43624819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档