我正在做一个项目,该项目需要将用户的坐标精确定位在几米的精度范围内。我注意到,当我走在街上时,手机上的谷歌地图应用程序会非常准确地跟踪我的运动,几乎总是在一米以内。
在我自己的项目中,我做了以下工作:
在我的 Android 清单中.xml我有:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在我的 MainActivity 中.java我有一个名为recenter
的函数,如下所示:
private void recenter(Location location) {
LatLng user = new LatLng(location.getLatitude(), location.getLongitude());
userMarker.setPosition(user);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(user, 20));
}
在我的onCreate
中,我让我们成为这样LocationManager
和LocationListener
(locationListener
被触发呼叫recenter
(:
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
recenter(location);
}
...
};
确保用户已手动授予权限后,我运行以下命令:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
尽管如此,我的别针通常是几个,我会说大约 10 米远。 是否可以在自制应用程序上获得谷歌地图级别的结果? 如果没有,有人能够获得更准确的结果吗?
这是来自安卓文档:
Android 提供两种位置信息权限:ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。您选择的权限决定了 API 返回的位置的准确性。您只需要请求 安卓位置权限之一,具体取决于 您需要的精度:
ACCESS_FINE_LOCATION – 允许 API
从可用的位置中尽可能精确地确定位置 位置提供商,包括全球定位系统 (GPS( 以及无线网络和移动手机数据。
尝试删除清单中的每个位置,但"精细课程位置"权限除外。