Android: Fix QtMediaRecorder
Don't extend the MediaRecorder class as this causes ART to fail when it doesn't find the postEventFromNative() function. Task-number: QTBUG-38166 Change-Id: Ia38ce4558a2cc95a9b4cd05b9f926d41e53fdc0d Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
a8854cc549
commit
6fb0d97838
@@ -10,7 +10,7 @@ JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlay
|
|||||||
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureListener.java \
|
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureListener.java \
|
||||||
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java \
|
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java \
|
||||||
$$PWD/src/org/qtproject/qt5/android/multimedia/QtMultimediaUtils.java \
|
$$PWD/src/org/qtproject/qt5/android/multimedia/QtMultimediaUtils.java \
|
||||||
$$PWD/src/org/qtproject/qt5/android/multimedia/QtMediaRecorder.java
|
$$PWD/src/org/qtproject/qt5/android/multimedia/QtMediaRecorderListener.java
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_PREFIX]/jar
|
target.path = $$[QT_INSTALL_PREFIX]/jar
|
||||||
|
|||||||
@@ -43,16 +43,13 @@ package org.qtproject.qt5.android.multimedia;
|
|||||||
|
|
||||||
import android.media.MediaRecorder;
|
import android.media.MediaRecorder;
|
||||||
|
|
||||||
public class QtMediaRecorder extends MediaRecorder implements MediaRecorder.OnErrorListener, MediaRecorder.OnInfoListener
|
public class QtMediaRecorderListener implements MediaRecorder.OnErrorListener, MediaRecorder.OnInfoListener
|
||||||
{
|
{
|
||||||
private long m_id = -1;
|
private long m_id = -1;
|
||||||
|
|
||||||
public QtMediaRecorder(long id)
|
public QtMediaRecorderListener(long id)
|
||||||
{
|
{
|
||||||
super();
|
|
||||||
m_id = id;
|
m_id = id;
|
||||||
setOnErrorListener(this);
|
|
||||||
setOnInfoListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static jclass g_qtMediaRecorderClass = 0;
|
static jclass g_qtMediaRecorderListenerClass = 0;
|
||||||
static QMap<jlong, JMediaRecorder*> g_objectMap;
|
static QMap<jlong, JMediaRecorder*> g_objectMap;
|
||||||
|
|
||||||
static void notifyError(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
static void notifyError(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
||||||
@@ -68,10 +68,18 @@ JMediaRecorder::JMediaRecorder()
|
|||||||
: QObject()
|
: QObject()
|
||||||
, m_id(reinterpret_cast<jlong>(this))
|
, m_id(reinterpret_cast<jlong>(this))
|
||||||
{
|
{
|
||||||
m_mediaRecorder = QJNIObjectPrivate(g_qtMediaRecorderClass, "(J)V", m_id);
|
m_mediaRecorder = QJNIObjectPrivate("android/media/MediaRecorder");
|
||||||
if (m_mediaRecorder.isValid())
|
if (m_mediaRecorder.isValid()) {
|
||||||
|
QJNIObjectPrivate listener(g_qtMediaRecorderListenerClass, "(J)V", m_id);
|
||||||
|
m_mediaRecorder.callMethod<void>("setOnErrorListener",
|
||||||
|
"(Landroid/media/MediaRecorder$OnErrorListener;)V",
|
||||||
|
listener.object());
|
||||||
|
m_mediaRecorder.callMethod<void>("setOnInfoListener",
|
||||||
|
"(Landroid/media/MediaRecorder$OnErrorListener;)V",
|
||||||
|
listener.object());
|
||||||
g_objectMap.insert(m_id, this);
|
g_objectMap.insert(m_id, this);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JMediaRecorder::~JMediaRecorder()
|
JMediaRecorder::~JMediaRecorder()
|
||||||
{
|
{
|
||||||
@@ -271,13 +279,13 @@ static JNINativeMethod methods[] = {
|
|||||||
|
|
||||||
bool JMediaRecorder::initJNI(JNIEnv *env)
|
bool JMediaRecorder::initJNI(JNIEnv *env)
|
||||||
{
|
{
|
||||||
jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtMediaRecorder");
|
jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtMediaRecorderListener");
|
||||||
if (env->ExceptionCheck())
|
if (env->ExceptionCheck())
|
||||||
env->ExceptionClear();
|
env->ExceptionClear();
|
||||||
|
|
||||||
if (clazz) {
|
if (clazz) {
|
||||||
g_qtMediaRecorderClass = static_cast<jclass>(env->NewGlobalRef(clazz));
|
g_qtMediaRecorderListenerClass = static_cast<jclass>(env->NewGlobalRef(clazz));
|
||||||
if (env->RegisterNatives(g_qtMediaRecorderClass,
|
if (env->RegisterNatives(g_qtMediaRecorderListenerClass,
|
||||||
methods,
|
methods,
|
||||||
sizeof(methods) / sizeof(methods[0])) < 0) {
|
sizeof(methods) / sizeof(methods[0])) < 0) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user