From f1c2b6f5f97cd65f70cae2d38b2e1fb19ab8502c Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Tue, 2 Nov 2021 17:53:32 +0200 Subject: 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 Reviewed-by: Rami Potinkara --- .../jar/src/org/qtproject/qt/android/QtNative.java | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/android/jar/src/org/qtproject/qt/android/QtNative.java') 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); -- cgit v1.2.3