diff options
author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-02-21 11:08:03 +0100 |
---|---|---|
committer | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-02-23 06:57:50 +0000 |
commit | e209051ca818de551bcfd276c4d06885cfc26e55 (patch) | |
tree | 112ede5fdf5c3cc3bb34c3b36ae9c4b07fd733b5 /src/multimedia | |
parent | f398aac61b6302b81090c2f460a333a9f09872ed (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.cpp | 26 | ||||
-rw-r--r-- | src/multimedia/android/qandroidmediadevices_p.h | 1 |
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, |