diff --git a/src/plugins/android/src/common/qandroidmultimediautils.cpp b/src/plugins/android/src/common/qandroidmultimediautils.cpp
index c7a16dcf0e4544a0fa486128dff03fbe16c50609..a4a7f773d0639cd3a3a2628236f4a624d646726d 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.cpp
+++ b/src/plugins/android/src/common/qandroidmultimediautils.cpp
@@ -38,8 +38,11 @@
 ****************************************************************************/
 
 #include "qandroidmultimediautils.h"
+#include "qandroidglobal.h"
 
 #include <qlist.h>
+#include <QtCore/private/qjni_p.h>
+#include <QtCore/private/qjnihelpers_p.h>
 
 QT_BEGIN_NAMESPACE
 
@@ -110,4 +113,30 @@ AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrame::Pix
     }
 }
 
+bool qt_androidRequestPermission(const QString &key)
+{
+    using namespace QtAndroidPrivate;
+
+    if (androidSdkVersion() < 23)
+        return true;
+
+    PermissionsResult res = checkPermission(key);
+    if (res == PermissionsResult::Granted) // Permission already granted?
+        return true;
+
+    QJNIEnvironmentPrivate env;
+    const auto &results = requestPermissionsSync(env, QStringList() << key);
+    if (!results.contains(key)) {
+        qCWarning(qtAndroidMediaPlugin, "No permission found for key: %s", qPrintable(key));
+        return false;
+    }
+
+    if (results[key] == PermissionsResult::Denied) {
+        qCDebug(qtAndroidMediaPlugin, "%s - Permission denied by user!", qPrintable(key));
+        return false;
+    }
+
+    return true;
+}
+
 QT_END_NAMESPACE
diff --git a/src/plugins/android/src/common/qandroidmultimediautils.h b/src/plugins/android/src/common/qandroidmultimediautils.h
index 0e811ecb82dc2851900957f40867382b5e3ebcf7..0a837ae3c113ae4627cfd42a582805587ff5d765 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.h
+++ b/src/plugins/android/src/common/qandroidmultimediautils.h
@@ -55,6 +55,8 @@ bool qt_sizeLessThan(const QSize &s1, const QSize &s2);
 QVideoFrame::PixelFormat qt_pixelFormatFromAndroidImageFormat(AndroidCamera::ImageFormat f);
 AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrame::PixelFormat f);
 
+bool qt_androidRequestPermission(const QString &key);
+
 QT_END_NAMESPACE
 
 #endif // QANDROIDMULTIMEDIAUTILS_H