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

时间:2015-12-11 21:27:15

标签: android android-maps-v2

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

见过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获得的价值是否正确,但文档说明

&#34;如果此位置没有准确性,则返回0.0。 LocationManager生成的所有位置都包含准确度。&#34;

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

这是否会导致负值?如果它具有合法性,那么负值意味着什么呢?这是Google提供给我的位置中的错误吗?

该应用正在运行play-services-maps 7.0.0。我打算更新到更新的版本,但我还是想了解这里发生了什么,如果它不是位置服务api中的错误,我现在要检查一下圆...

1 个答案:

答案 0 :(得分:0)

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

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

if (accuracy < 0)
    accuracy = 0;

co.radius(accuracy);