summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-11-02 17:53:32 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-12-03 14:19:21 +0200
commitf1c2b6f5f97cd65f70cae2d38b2e1fb19ab8502c (patch)
treef36c45a3c308adaa286e538f173225dc1db4ccfe /src/android
parentbe55118bd3b33bed160d7533fd3bd83f229bcd67 (diff)
Android: add methods to get the FileDescriptor for a Uri
This can be useful for some cases when the Android APIs have calls that expects a FileDescriptor instead of a Uri or an int file descriptor (like a case in Qt Multimedia with MediaRecorder). Pick-to: 6.2 Task-number: QTBUG-96081 Task-number: QTBUG-96957 Change-Id: I0ab8d37a43b7cb94f6ebb5d48014e5a7903aadc7 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
index ac67a0542f..3c26e6d4f2 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
@@ -41,6 +41,7 @@
package org.qtproject.qt.android;
import java.io.File;
+import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Objects;
@@ -240,6 +241,37 @@ public class QtNative
}
}
+ public static ParcelFileDescriptor openParcelFdForContentUrl(Context context, String contentUrl,
+ String openMode)
+ {
+ Uri uri = m_cachedUris.get(contentUrl);
+ if (uri == null)
+ uri = getUriWithValidPermission(context, contentUrl, openMode);
+
+ if (uri == null) {
+ Log.e(QtTAG, getCurrentMethodNameLog() + INVALID_OR_NULL_URI_ERROR_MESSAGE);
+ return null;
+ }
+
+ try {
+ final ContentResolver resolver = context.getContentResolver();
+ return resolver.openFileDescriptor(uri, openMode);
+ } catch (FileNotFoundException | IllegalArgumentException | SecurityException e) {
+ Log.e(QtTAG, getCurrentMethodNameLog() + e.toString());
+ }
+
+ return null;
+ }
+
+ public static FileDescriptor openFdObjectForContentUrl(Context context, String contentUrl,
+ String openMode)
+ {
+ final ParcelFileDescriptor pfd = openParcelFdForContentUrl(context, contentUrl, openMode);
+ if (pfd != null)
+ return pfd.getFileDescriptor();
+ return null;
+ }
+
public static int openFdForContentUrl(Context context, String contentUrl, String openMode)
{
Uri uri = m_cachedUris.get(contentUrl);