diff options
author | Vyacheslav Koscheev <v.koscheev@2gis.ru> | 2020-10-14 10:19:42 +0700 |
---|---|---|
committer | Vyacheslav Koscheev <v.koscheev@2gis.ru> | 2020-11-03 16:00:03 +0700 |
commit | bf8075b3e11f7e33dd5c1197066e2f5f7a6e2d72 (patch) | |
tree | 81ea123d18beaf0d5e4330944804277c3941bfc1 | |
parent | 03acfd3518edaadc4afccf5e3c077f078e4bf372 (diff) | |
download | qtlocation-bf8075b3e11f7e33dd5c1197066e2f5f7a6e2d72.tar.gz |
Android: fix Location properties
According to android doc getAltitude, getAccuracy,
getVerticalAccuracyMeters, getSpeed, getBearing &
getAltitude returns 0.0 if location does not have this value.
Corresponding has* method can return false positive on some devices.
e.g. Huawei P20 Pro
Change-Id: I887412cf2cff05414de08c774947d969fc69aa92
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r-- | src/plugins/position/android/src/jnipositioning.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp index 05b25d98..a9fe6ae7 100644 --- a/src/plugins/position/android/src/jnipositioning.cpp +++ b/src/plugins/position/android/src/jnipositioning.cpp @@ -223,7 +223,10 @@ namespace AndroidPositioning { if (attributeExists) { mid = getCachedMethodID(jniEnv, thisClass, "getAltitude", "()D"); jdouble value = jniEnv->CallDoubleMethod(location, mid); - coordinate.setAltitude(value); + if (value != 0.0) + { + coordinate.setAltitude(value); + } } info.setCoordinate(coordinate); @@ -239,7 +242,10 @@ namespace AndroidPositioning { if (attributeExists) { mid = getCachedMethodID(jniEnv, thisClass, "getAccuracy", "()F"); jfloat accuracy = jniEnv->CallFloatMethod(location, mid); - info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, qreal(accuracy)); + if (accuracy != 0.0) + { + info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, qreal(accuracy)); + } } //vertical accuracy @@ -250,7 +256,10 @@ namespace AndroidPositioning { mid = getCachedMethodID(jniEnv, thisClass, "getVerticalAccuracyMeters", "()F"); if (mid) { jfloat accuracy = jniEnv->CallFloatMethod(location, mid); - info.setAttribute(QGeoPositionInfo::VerticalAccuracy, qreal(accuracy)); + if (accuracy != 0.0) + { + info.setAttribute(QGeoPositionInfo::VerticalAccuracy, qreal(accuracy)); + } } } } @@ -264,7 +273,10 @@ namespace AndroidPositioning { if (attributeExists) { mid = getCachedMethodID(jniEnv, thisClass, "getSpeed", "()F"); jfloat speed = jniEnv->CallFloatMethod(location, mid); - info.setAttribute(QGeoPositionInfo::GroundSpeed, qreal(speed)); + if (speed != 0) + { + info.setAttribute(QGeoPositionInfo::GroundSpeed, qreal(speed)); + } } //bearing @@ -273,7 +285,10 @@ namespace AndroidPositioning { if (attributeExists) { mid = getCachedMethodID(jniEnv, thisClass, "getBearing", "()F"); jfloat bearing = jniEnv->CallFloatMethod(location, mid); - info.setAttribute(QGeoPositionInfo::Direction, qreal(bearing)); + if (bearing != 0.0) + { + info.setAttribute(QGeoPositionInfo::Direction, qreal(bearing)); + } } jniEnv->DeleteLocalRef(thisClass); |