summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/src/common/qandroidmultimediautils.cpp5
-rw-r--r--src/plugins/android/src/common/qandroidmultimediautils.h1
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerasession.cpp11
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerasession.h2
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcapturesession.cpp6
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediarecorder.cpp5
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediarecorder.h1
7 files changed, 22 insertions, 9 deletions
diff --git a/src/plugins/android/src/common/qandroidmultimediautils.cpp b/src/plugins/android/src/common/qandroidmultimediautils.cpp
index a4a7f773d..fa6e7da65 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.cpp
+++ b/src/plugins/android/src/common/qandroidmultimediautils.cpp
@@ -139,4 +139,9 @@ bool qt_androidRequestPermission(const QString &key)
return true;
}
+bool qt_androidRequestRecordingPermission()
+{
+ return qt_androidRequestPermission(QLatin1String("android.permission.RECORD_AUDIO"));
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/common/qandroidmultimediautils.h b/src/plugins/android/src/common/qandroidmultimediautils.h
index 0a837ae3c..bbd2e9aa5 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.h
+++ b/src/plugins/android/src/common/qandroidmultimediautils.h
@@ -56,6 +56,7 @@ QVideoFrame::PixelFormat qt_pixelFormatFromAndroidImageFormat(AndroidCamera::Ima
AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrame::PixelFormat f);
bool qt_androidRequestPermission(const QString &key);
+bool qt_androidRequestRecordingPermission();
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
index 6a30e5300..9de3330c7 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
@@ -78,6 +78,7 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
, m_captureCanceled(false)
, m_currentImageCaptureId(-1)
, m_previewCallback(0)
+ , m_keepActive(false)
{
m_mediaStorageLocation.addStorageLocation(
QMediaStorageLocation::Pictures,
@@ -913,7 +914,7 @@ void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state
{
switch (state) {
case Qt::ApplicationInactive:
- if (m_state != QCamera::UnloadedState) {
+ if (!m_keepActive && m_state != QCamera::UnloadedState) {
m_savedState = m_state;
close();
m_state = QCamera::UnloadedState;
@@ -931,4 +932,12 @@ void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state
}
}
+bool QAndroidCameraSession::requestRecordingPermission()
+{
+ m_keepActive = true;
+ const bool result = qt_androidRequestRecordingPermission();
+ m_keepActive = false;
+ return result;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.h b/src/plugins/android/src/mediacapture/qandroidcamerasession.h
index b51dcc628..728dc484e 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerasession.h
+++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.h
@@ -112,6 +112,7 @@ public:
virtual void onFrameAvailable(const QVideoFrame &frame) = 0;
};
void setPreviewCallback(PreviewCallback *callback);
+ bool requestRecordingPermission();
Q_SIGNALS:
void statusChanged(QCamera::Status status);
@@ -196,6 +197,7 @@ private:
QSet<QAndroidMediaVideoProbeControl *> m_videoProbes;
QMutex m_videoProbesMutex;
PreviewCallback *m_previewCallback;
+ bool m_keepActive;
};
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp b/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp
index bc9bc983e..7cc3ad619 100644
--- a/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp
@@ -206,8 +206,10 @@ void QAndroidCaptureSession::start()
delete m_mediaRecorder;
}
-
- if (!AndroidMediaRecorder::requestRecordingPermission()) {
+ const bool granted = m_cameraSession
+ ? m_cameraSession->requestRecordingPermission()
+ : qt_androidRequestRecordingPermission();
+ if (!granted) {
setStatus(QMediaRecorder::UnavailableStatus);
Q_EMIT error(QMediaRecorder::ResourceError, QLatin1String("Permission denied."));
return;
diff --git a/src/plugins/android/src/wrappers/jni/androidmediarecorder.cpp b/src/plugins/android/src/wrappers/jni/androidmediarecorder.cpp
index d0101411b..d607ab806 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediarecorder.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidmediarecorder.cpp
@@ -383,11 +383,6 @@ void AndroidMediaRecorder::setSurfaceHolder(AndroidSurfaceHolder *holder)
}
}
-bool AndroidMediaRecorder::requestRecordingPermission()
-{
- return qt_androidRequestPermission(QLatin1String("android.permission.RECORD_AUDIO"));
-}
-
bool AndroidMediaRecorder::initJNI(JNIEnv *env)
{
jclass clazz = QJNIEnvironmentPrivate::findClass(QtMediaRecorderListenerClassName,
diff --git a/src/plugins/android/src/wrappers/jni/androidmediarecorder.h b/src/plugins/android/src/wrappers/jni/androidmediarecorder.h
index cd2d164d8..e4b3a80ea 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediarecorder.h
+++ b/src/plugins/android/src/wrappers/jni/androidmediarecorder.h
@@ -160,7 +160,6 @@ public:
void setSurfaceTexture(AndroidSurfaceTexture *texture);
void setSurfaceHolder(AndroidSurfaceHolder *holder);
- static bool requestRecordingPermission();
static bool initJNI(JNIEnv *env);
Q_SIGNALS: