summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2020-02-21 23:45:58 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2020-02-24 12:12:43 +0200
commitd983c7edac94b5e397b781b3f7a9b119d1996318 (patch)
tree1e804f5c5914bd94cc0412e10f6d2b9b9cb57db8
parent47391b2d74f65ea3a3a67c0a5359499582d6cfdb (diff)
downloadqtlocation-d983c7edac94b5e397b781b3f7a9b119d1996318.tar.gz
Examples: request permissions storage permissions on Android
Since QStandardPaths::writableLocation() is used, it's best to make sure we have to write permissions on Android. Task-number: QTBUG-80717 Change-Id: I992661aed25e7d40254f7c7d6373273cf84aac16 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--examples/location/geojson_viewer/geojson_viewer.pro2
-rw-r--r--examples/location/geojson_viewer/main.cpp23
2 files changed, 25 insertions, 0 deletions
diff --git a/examples/location/geojson_viewer/geojson_viewer.pro b/examples/location/geojson_viewer/geojson_viewer.pro
index cf261b36..08b28144 100644
--- a/examples/location/geojson_viewer/geojson_viewer.pro
+++ b/examples/location/geojson_viewer/geojson_viewer.pro
@@ -2,6 +2,8 @@ TARGET = qml_location_geojsonviewer
TEMPLATE = app
QT += core qml network quick positioning location-private widgets
+android: QT += androidextras
+
SOURCES += main.cpp
CONFIG += c++11
CONFIG += install_ok
diff --git a/examples/location/geojson_viewer/main.cpp b/examples/location/geojson_viewer/main.cpp
index 996c0925..61f7d233 100644
--- a/examples/location/geojson_viewer/main.cpp
+++ b/examples/location/geojson_viewer/main.cpp
@@ -70,6 +70,9 @@
#include <QJsonArray>
#include <QFileInfo>
#include <QtCore/qobjectdefs.h>
+#ifdef Q_OS_ANDROID
+#include <QtAndroid>
+#endif
class extractor
{
@@ -247,10 +250,30 @@ public:
#include "main.moc"
+#ifdef Q_OS_ANDROID
+// Request permissions because we're using QStandardPaths::writableLocation()
+bool requestStoragePermissions() {
+ using namespace QtAndroid;
+
+ QString permission = QStringLiteral("android.permission.WRITE_EXTERNAL_STORAGE");
+ const QHash<QString, PermissionResult> results = requestPermissionsSync(QStringList({permission}));
+ if (!results.contains(permission) || results[permission] == PermissionResult::Denied) {
+ qWarning() << "Couldn't get permission: " << permission;
+ return false;
+ }
+
+ return true;
+}
+#endif
+
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
+#ifdef Q_OS_ANDROID
+ if (!requestStoragePermissions())
+ return -1;
+#endif
QQmlApplicationEngine engine;
QUrl absoluteFilePath = argc > 1 ?