diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-11-02 17:53:32 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-12-03 14:19:21 +0200 |
commit | f1c2b6f5f97cd65f70cae2d38b2e1fb19ab8502c (patch) | |
tree | f36c45a3c308adaa286e538f173225dc1db4ccfe /src/android/jar/src | |
parent | be55118bd3b33bed160d7533fd3bd83f229bcd67 (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/jar/src')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtNative.java | 32 |
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); |