我是Qt的初学者,
我试图使用Qt制作一个Android应用程序并使用GStreamer(而不是QtGStreamer)通过RTSP流式传输视频。
但是当我用
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文件中,我不知道我还应该做些什么。
有没有人可以帮我解决这个问题? 感谢。
答案 0 :(得分:1)
我在* .pro文件中添加了LIBS += -landroid
。所以,它有效。
答案 1 :(得分:0)
我使用QtAndroid :: androidActivity()和callMethod,callObjectMethod。
我添加:
android {
QT + = core_private gui_private androidextras
定义+ = Q_OS_ANDROID \ HAVE_TIME_H \ HAVE_SYS_SELECT_H \ HAVE_LRAND48 \ HAVE_NETINET_IN_H }
到.pro文件,所以它可以工作。