我正在努力获得最高的定位精度,我所学到的是来自GPS提供商。我只需要获得一次位置,所以我不关心对电池寿命的影响。在我的功能代码中,位置似乎在完全不准确(1 + km)到非常准确(10m内)之间交替。在我的应用程序的测试中,我在手机上启用/禁用位置,打开/关闭wifi,打开/关闭数据。这只是为了试验,看看每个如何影响一般的准确性和应用程序。
以下代码是来自位置活动的onCreate方法:
last_event
但是当我添加@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_fragment))
.getMap();
mMap.setMyLocationEnabled(true);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
//criteria.setAccuracy(Criteria.ACCURACY_HIGH);
provider = locationManager.getBestProvider(criteria, true);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
// Create the LocationRequest object
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(2 * 1000) // 10 seconds, in milliseconds
.setFastestInterval(1 * 1000); // 1 second, in milliseconds
}
行时,我的应用程序崩溃了。
发生了什么事?
编辑:这是logcat错误:
criteria.setAccuracy(Criteria.ACCURACY_HIGH);
我对android很新,不太确定相关部分是什么。
答案 0 :(得分:7)
这一行是真正的错误:
E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.locationget/com.locationget.MapActivity}:java.lang.IllegalArgumentException: accuracy=3
这是我在搜索后发现的:
android Criteria有两组独立的精度常数。 ACCURACY_FINE和ACCURACY_COARSE用于一般位置,而 可以使用ACCURACY_LOW,ACCURACY_MEDIUM和ACCURACY_HIGH“ 水平,高度,速度或轴承精度。“
因此,在您的情况下,请勿使用ACCURACY_HIGH
,否则您将收到错误消息。请改用ACCURACY_COARSE
或ACCURACY_FINE
。
答案 1 :(得分:4)
使用criteria.setAccuracy(Criteria.ACCURACY_FINE);
而不是criteria.setAccuracy(Criteria.ACCURACY_HIGH);
。