summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java4
-rw-r--r--src/plugins/platforms/android/qandroidplatformservices.cpp23
2 files changed, 22 insertions, 5 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 040eba5e42..11b6ad8cdc 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -100,13 +100,15 @@ public class QtNative
}
}
- public static boolean openURL(String url)
+ public static boolean openURL(String url, String mime)
{
boolean ok = true;
try {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ if (!mime.isEmpty())
+ intent.setDataAndType(uri, mime);
activity().startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
diff --git a/src/plugins/platforms/android/qandroidplatformservices.cpp b/src/plugins/platforms/android/qandroidplatformservices.cpp
index 2dba6c78e1..412e3e0466 100644
--- a/src/plugins/platforms/android/qandroidplatformservices.cpp
+++ b/src/plugins/platforms/android/qandroidplatformservices.cpp
@@ -33,8 +33,9 @@
#include "qandroidplatformservices.h"
#include <QUrl>
-#include <QDir>
+#include <QFile>
#include <QDebug>
+#include <QMimeDatabase>
#include <QtCore/private/qjni_p.h>
QT_BEGIN_NAMESPACE
@@ -43,13 +44,27 @@ QAndroidPlatformServices::QAndroidPlatformServices()
{
}
-bool QAndroidPlatformServices::openUrl(const QUrl &url)
+bool QAndroidPlatformServices::openUrl(const QUrl &theUrl)
{
+ QString mime;
+ QUrl url(theUrl);
+
+ // if the file is local, we need to pass the MIME type, otherwise Android
+ // does not start an Intent to view this file
+ if ((url.scheme().isEmpty() && QFile::exists(url.path())) || url.isLocalFile()) {
+ // a real URL including the scheme is needed, else the Intent can not be started
+ url.setScheme(QLatin1String("file"));
+
+ QMimeDatabase mimeDb;
+ mime = mimeDb.mimeTypeForUrl(url).name();
+ }
+
QJNIObjectPrivate urlString = QJNIObjectPrivate::fromString(url.toString());
+ QJNIObjectPrivate mimeString = QJNIObjectPrivate::fromString(mime);
return QJNIObjectPrivate::callStaticMethod<jboolean>(QtAndroid::applicationClass(),
"openURL",
- "(Ljava/lang/String;)Z",
- urlString.object());
+ "(Ljava/lang/String;Ljava/lang/String;)Z",
+ urlString.object(), mimeString.object());
}
bool QAndroidPlatformServices::openDocument(const QUrl &url)