首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android - Location.getAccuracy()返回负精度

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

Stack Overflow用户
提问于 2015-12-11 21:27:14
回答 1查看 1.3K关注 0票数 3

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

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

代码语言:javascript
复制
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)

有一次我看到它的时候,我早上回到应用程序,它会崩溃,指的是活动被破坏和重新创造的一些东西?

在崩溃之前,实际的错误会通过这三种方法。

代码语言:javascript
复制
@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-map 7.0.0。我计划更新到一个更新的版本,但我仍然想了解这里发生了什么,如果它不是位置服务api中的一个bug,现在我将在绘制圆圈时进行检查.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 21:33:13

如果API确实传递负值,那么它应该是设备固件中的一个bug。

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

代码语言:javascript
复制
if (accuracy < 0)
    accuracy = 0;

co.radius(accuracy);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34232835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档