summaryrefslogtreecommitdiff
path: root/src/plugins/position/corelocation/qgeopositioninfosource_cl.mm
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-01-26 10:02:03 +0100
committerLiang Qi <liang.qi@qt.io>2018-01-26 10:18:14 +0100
commit518633da419d6cfaf603773b9e8c5840e783bc4a (patch)
tree326ffd3f5497be64e38fa420af016867ada00538 /src/plugins/position/corelocation/qgeopositioninfosource_cl.mm
parent9283a290040fd55f7eb34580b99f771d4facdeb4 (diff)
parent68b5ee9e7064f66fd7e7bd69b4b51229dbe8cc3c (diff)
downloadqtlocation-518633da419d6cfaf603773b9e8c5840e783bc4a.tar.gz
Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts: tests/auto/qgeotiledmap/tst_qgeotiledmap.cpp tests/plugins/declarativetestplugin/testhelper.h Change-Id: Ie218ab1dc68642a6922e05e5688c20b90440b72e
Diffstat (limited to 'src/plugins/position/corelocation/qgeopositioninfosource_cl.mm')
-rw-r--r--src/plugins/position/corelocation/qgeopositioninfosource_cl.mm31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/plugins/position/corelocation/qgeopositioninfosource_cl.mm b/src/plugins/position/corelocation/qgeopositioninfosource_cl.mm
index 3fac056e..94c5b807 100644
--- a/src/plugins/position/corelocation/qgeopositioninfosource_cl.mm
+++ b/src/plugins/position/corelocation/qgeopositioninfosource_cl.mm
@@ -40,6 +40,7 @@
#include <QTimerEvent>
#include <QDebug>
#include <QtCore/qglobal.h>
+#include <QtCore/private/qglobal_p.h>
#include "qgeopositioninfosource_cl_p.h"
@@ -141,15 +142,17 @@ bool QGeoPositionInfoSourceCL::enableLocationManager()
if (!m_locationManager) {
m_locationManager = [[CLLocationManager alloc] init];
-#ifdef Q_OS_IOS
- NSDictionary<NSString *, id> *infoDict = [[NSBundle mainBundle] infoDictionary];
- if (id value = [infoDict objectForKey:@"UIBackgroundModes"]) {
- if ([value isKindOfClass:[NSArray class]]) {
- NSArray *modes = static_cast<NSArray *>(value);
- for (id mode in modes) {
- if ([@"location" isEqualToString:mode]) {
- m_locationManager.allowsBackgroundLocationUpdates = YES;
- break;
+#if defined(Q_OS_IOS) || defined(Q_OS_WATCHOS)
+ if (__builtin_available(watchOS 4.0, *)) {
+ NSDictionary<NSString *, id> *infoDict = [[NSBundle mainBundle] infoDictionary];
+ if (id value = [infoDict objectForKey:@"UIBackgroundModes"]) {
+ if ([value isKindOfClass:[NSArray class]]) {
+ NSArray *modes = static_cast<NSArray *>(value);
+ for (id mode in modes) {
+ if ([@"location" isEqualToString:mode]) {
+ m_locationManager.allowsBackgroundLocationUpdates = YES;
+ break;
+ }
}
}
}
@@ -162,10 +165,12 @@ bool QGeoPositionInfoSourceCL::enableLocationManager()
// These two methods are new in iOS 8. They require NSLocationAlwaysUsageDescription
// and NSLocationWhenInUseUsageDescription to be set in Info.plist to work (methods are
// noop if there are no such entries in plist).
- if ([m_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
- [m_locationManager performSelector:@selector(requestAlwaysAuthorization)];
- if ([m_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
- [m_locationManager performSelector:@selector(requestWhenInUseAuthorization)];
+#ifndef Q_OS_MACOS
+#ifndef Q_OS_TVOS
+ [m_locationManager requestAlwaysAuthorization];
+#endif
+ [m_locationManager requestWhenInUseAuthorization];
+#endif
}
return (m_locationManager != 0);