我的应用程序中发生了以下崩溃,一次发生在我身上,一次在野外。当我在地图周围画一个半径圆,精度为负时,就会发生这种情况。除了硬编码一个负值之外,我无法重现这个问题。
在Moto G gen1(4.4.4)和三星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)
有一次我看到它时,我早上回到应用程序,它会崩溃,指向被破坏和重新创建的活动?
实际错误在崩溃前通过这三种方法
@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()
这会返回负值是有原因的吗?如果负值是合法的,它意味着什么?谷歌提供给我的位置有漏洞吗?
该应用程序正在运行播放服务地图7.0.0。我计划更新到一个新版本,但如果不是定位服务api中的错误,我仍然想了解这里发生了什么,现在我将检查是否画出了圆圈。。。
如果API真的传递了负值,那么这应该是设备固件中的一个bug。
你不能更改固件,但你可以通过检查准确性来避免:
if (accuracy < 0)
accuracy = 0;
co.radius(accuracy);