diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-12-21 16:04:04 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-01-05 13:38:21 +0000 |
commit | ec6775d9c0131e02b9b0033da852a0e4e04cb967 (patch) | |
tree | 0cbd6d624bf0f34c90dc334d48798605112e6b2c | |
parent | 6d846b567b595f2ae32d996a549d0f09dc0391a2 (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.cpp | 17 |
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 |