gpt4 book ai didi

Android - Location.getAccuracy() 返回负精度

转载 作者:行者123 更新时间:2023-12-04 18:01:45 26 4
gpt4 key购买 nike

我的应用程序中发生过以下崩溃,一次发生在我身上,一次发生在野外。当我在 map 周围画一个半径圆并且精度为负时,就会发生这种情况。除了硬编码负值外,我无法重现该问题。

在 Moto G gen1 (4.4.4) 和 Samsung Galaxy S3 (4.4.2) 上看到

Fatal Exception: java.lang.IllegalArgumentException: radius is negative
at com.google.a.a.ae.a(Unknown Source)
at com.google.maps.api.android.lib6.e.eg.(Unknown Source)
at com.google.maps.api.android.lib6.e.ev.a(Unknown Source)
at com.google.android.gms.maps.internal.j.onTransact(SourceFile:390)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addCircle(Unknown Source)
at com.google.android.gms.maps.GoogleMap.addCircle(Unknown Source)

有一次我看到它,我在早上回到应用程序,它会崩溃,指出有关 Activity 被销毁和重新创建的事情?

实际错误在崩溃前经过这三个方法

@Override
public void onLocationChanged(Location location) {
confirmValidLocationReading(location);
}

private void confirmValidLocationReading(Location location) {

lastLocLL = new LatLng(location.getLatitude(), location.getLongitude());
setMapLocation(lastLocLL, location.getAccuracy());

}

private void setMapLocation(LatLng latLong, double accuracy) {

CameraPosition cameraPosition = new CameraPosition.Builder()
.target(latLong)
.zoom(16)
.bearing(0)
.tilt(30)
.build();

googleMap.clear();
googleMap.addMarker(new MarkerOptions().position(latLong));
googleMap.setMyLocationEnabled(false);


CircleOptions co = new CircleOptions();
co.center(latLong);
co.radius(accuracy); //<--- Value is negative
co.strokeColor(getResources().getColor(R.color.themePrimaryTwo));
co.strokeWidth(4.0f);
googleMap.addCircle(co); //<--- App Crashes

googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

}

令人困惑的是,我从 API 中获取的值的准确度为负,但文档中说

“如果此位置没有准确度,则返回 0.0。LocationManager 生成的所有位置都包含准确度。”

http://developer.android.com/reference/android/location/Location.html#getAccuracy()

这会返回负值吗?如果合法,负值意味着什么?谷歌提供给我的位置是否存在错误?

该应用正在运行 play-services-maps 7.0.0。我计划更新到较新的版本,但我仍然想了解这里发生了什么,如果它不是位置服务 api 中的错误,我现在将检查画圈...

最佳答案

如果 API 确实传递了负值,那么它应该是设备固件中的错误。

您无法更改固件,但可以通过检查准确性来避免这种情况:

if (accuracy < 0)
accuracy = 0;

co.radius(accuracy);

关于Android - Location.getAccuracy() 返回负精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com