summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-12-21 16:04:04 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-01-05 13:38:21 +0000
commitec6775d9c0131e02b9b0033da852a0e4e04cb967 (patch)
tree0cbd6d624bf0f34c90dc334d48798605112e6b2c
parent6d846b567b595f2ae32d996a549d0f09dc0391a2 (diff)
Android: add API level check for hasVerticalAccuracy()
Location.hasVerticalAccuracy() and Location.getVerticalAccuracyMeters() methods are available since API Level 26. We tried to call these methods without the API Level check, which was leading to runtime exceptions on Java side. This patch fixes it. Fixes: QTBUG-99329 Change-Id: Ib43aec8a3891ab7200d28f6665bd7db60c13495e Reviewed-by: Juha Vuolle <juha.vuolle@insta.fi> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> (cherry picked from commit c452e9b906e20a6ef1594db0a4543f05b7aed1c2) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/position/android/src/jnipositioning.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp
index 24da657c..d1eb300e 100644
--- a/src/plugins/position/android/src/jnipositioning.cpp
+++ b/src/plugins/position/android/src/jnipositioning.cpp
@@ -274,15 +274,14 @@ namespace AndroidPositioning {
info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, qreal(accuracy));
}
- // vertical accuracy
- // The check for method existence happens inside QJniObject. If the
- // method is not found, 0 (or 0.0, or false) is returned, so we do not
- // need to handle it specially.
- attributeExists = jniObject.callMethod<jboolean>("hasVerticalAccuracy");
- if (attributeExists) {
- const jfloat accuracy = jniObject.callMethod<jfloat>("getVerticalAccuracyMeters");
- if (!qFuzzyIsNull(accuracy))
- info.setAttribute(QGeoPositionInfo::VerticalAccuracy, qreal(accuracy));
+ // vertical accuracy (available in API Level 26+)
+ if (QNativeInterface::QAndroidApplication::sdkVersion() > 25) {
+ attributeExists = jniObject.callMethod<jboolean>("hasVerticalAccuracy");
+ if (attributeExists) {
+ const jfloat accuracy = jniObject.callMethod<jfloat>("getVerticalAccuracyMeters");
+ if (!qFuzzyIsNull(accuracy))
+ info.setAttribute(QGeoPositionInfo::VerticalAccuracy, qreal(accuracy));
+ }
}
// ground speed