From 4003b48c5d1d72a2e5f285966e2381b8c9527de5 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 31 Jul 2023 13:33:03 -0700 Subject: [PATCH] Fix sd card permission --- android/AndroidManifest.xml | 1 + android/src/AndroidInterface.cc | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index bcd9c8f..5cbe6cd 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -102,5 +102,6 @@ + diff --git a/android/src/AndroidInterface.cc b/android/src/AndroidInterface.cc index 87b2441..cd8afdc 100644 --- a/android/src/AndroidInterface.cc +++ b/android/src/AndroidInterface.cc @@ -12,10 +12,25 @@ #include "QGCApplication.h" #include "AndroidInterface.h" #include +#include QString AndroidInterface::getSDCardPath() { QAndroidJniObject value = QAndroidJniObject::callStaticObjectMethod("org/mavlink/qgroundcontrol/QGCActivity", "getSDCardPath", "()Ljava/lang/String;"); - return value.toString(); + QString sdCardPath = value.toString(); + + QString readPermission("android.permission.READ_EXTERNAL_STORAGE"); + QString writePermission("android.permission.WRITE_EXTERNAL_STORAGE"); + + if (QtAndroid::checkPermission(readPermission) == QtAndroid::PermissionResult::Denied || + QtAndroid::checkPermission(writePermission) == QtAndroid::PermissionResult::Denied) { + QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({ readPermission, writePermission })); + if (resultHash[readPermission] == QtAndroid::PermissionResult::Denied || + resultHash[writePermission] == QtAndroid::PermissionResult::Denied) { + return QString(); + } + } + + return sdCardPath; }