summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVyacheslav Koscheev <v.koscheev@2gis.ru>2020-10-14 10:19:42 +0700
committerVyacheslav Koscheev <v.koscheev@2gis.ru>2020-11-03 16:00:03 +0700
commitbf8075b3e11f7e33dd5c1197066e2f5f7a6e2d72 (patch)
tree81ea123d18beaf0d5e4330944804277c3941bfc1
parent03acfd3518edaadc4afccf5e3c077f078e4bf372 (diff)
downloadqtlocation-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.cpp25
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);