summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorBartlomiej Moskal <bartlomiej.moskal@qt.io>2024-02-21 11:08:03 +0100
committerBartlomiej Moskal <bartlomiej.moskal@qt.io>2024-02-23 06:57:50 +0000
commite209051ca818de551bcfd276c4d06885cfc26e55 (patch)
tree112ede5fdf5c3cc3bb34c3b36ae9c4b07fd733b5 /src/multimedia
parentf398aac61b6302b81090c2f460a333a9f09872ed (diff)
Android: Move registration for audio devices updates
Move registration for audio devices updates to QAdnroidMediaDevice constructor. Without this fix, notifications were received before the QCoreApplication was created. It happens because in 1fccac110595d55dff9b1bdaa65e438421dca535 commit, registration of JNI Methods and registerAudioHeadsetStateReceiver call was moved to JNI_OnLoad function. While JNI Methods should be moved, registerAudioHeadsetStateReceiver can be called later (when it is needed). Especially that the update is only notification, without changed data. Pick-to: 6.7 6.6 6.5 Fixes: QTBUG-121943 Change-Id: I484fa8fc23b1a93135c32c86415bfb3422eded6e Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/android/qandroidmediadevices.cpp26
-rw-r--r--src/multimedia/android/qandroidmediadevices_p.h1
2 files changed, 21 insertions, 6 deletions
diff --git a/src/multimedia/android/qandroidmediadevices.cpp b/src/multimedia/android/qandroidmediadevices.cpp
index 022e758da..cd6548ac3 100644
--- a/src/multimedia/android/qandroidmediadevices.cpp
+++ b/src/multimedia/android/qandroidmediadevices.cpp
@@ -17,7 +17,26 @@
QT_BEGIN_NAMESPACE
-QAndroidMediaDevices::QAndroidMediaDevices() : QPlatformMediaDevices() { }
+Q_DECLARE_JNI_CLASS(QtAudioDeviceManager,
+ "org/qtproject/qt/android/multimedia/QtAudioDeviceManager");
+
+
+QAndroidMediaDevices::QAndroidMediaDevices() : QPlatformMediaDevices()
+{
+ QtJniTypes::QtAudioDeviceManager::callStaticMethod<void>(
+ "registerAudioHeadsetStateReceiver",
+ QNativeInterface::QAndroidApplication::context());
+}
+
+QAndroidMediaDevices::~QAndroidMediaDevices()
+{
+ // Object of QAndroidMediaDevices type is static. Unregistering will happend only when closing
+ // the application. In such case it is probably not needed, but let's leave it for
+ // compatibility with Android documentation
+ QtJniTypes::QtAudioDeviceManager::callStaticMethod<void>(
+ "unregisterAudioHeadsetStateReceiver",
+ QNativeInterface::QAndroidApplication::context());
+}
QList<QAudioDevice> QAndroidMediaDevices::audioInputs() const
{
@@ -92,11 +111,6 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
if (!registered)
return JNI_ERR;
- QJniObject::callStaticMethod<void>("org/qtproject/qt/android/multimedia/QtAudioDeviceManager",
- "registerAudioHeadsetStateReceiver",
- "(Landroid/content/Context;)V",
- QNativeInterface::QAndroidApplication::context());
-
return JNI_VERSION_1_6;
}
diff --git a/src/multimedia/android/qandroidmediadevices_p.h b/src/multimedia/android/qandroidmediadevices_p.h
index 97106d6dd..a77ed0451 100644
--- a/src/multimedia/android/qandroidmediadevices_p.h
+++ b/src/multimedia/android/qandroidmediadevices_p.h
@@ -25,6 +25,7 @@ class QAndroidMediaDevices : public QPlatformMediaDevices
public:
QAndroidMediaDevices();
+ ~QAndroidMediaDevices();
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo,