我有问题,我想使用googleMap进行地理定位。我没有谷歌地图的问题,只是,地理定位没有运行,纬度和经度的值是空的
public void geolocalisation() {
lmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000l, 10l, new LocationListener(){
public void onLocationChanged(Location arg0) {
latitude = arg0.getLatitude();
longitude = arg0.getLongitude();
}
public void onProviderDisabled(String arg0) {}
public void onProviderEnabled(String arg0) {}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
});
GeoPoint position = new GeoPoint(microdegrees(longitude),microdegrees(latitude));
MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker
marker.addPoint(position);
maMap.getOverlays().add(marker);
monControler = this.maMap.getController();
}
这是androidManifest中的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS"/>
我不知道有什么问题?
答案 0 :(得分:1)
我怀疑问题可能是第二个&amp;调用requestLocationUpdates时的第3个参数。他们说,最多每秒发送一次位置更新,并且只有当位置变化超过10米时才会发送。对于坐在你的开发机器上的大多数情况,在调试和看logcat中运行,每秒移动10米似乎不太可能。
来自API文档:
可以使用minTime和来控制通知的频率 minDistance参数。如果minTime大于0,则 LocationManager可能会休息minTime毫秒 位置更新之间以节省电力。 如果minDistance更大 如果设备移动,则只会广播位置,而不是0 mindistance米。要尽可能频繁地获取通知, 将两个参数都设置为0。
另外,我想你会想要将以下几行移到onLocationChanged处理程序中,否则它们只会被调用一次,而不是每次更新;
GeoPoint position = new GeoPoint(microdegrees(latitude),microdegrees(longitude));
MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker
marker.addPoint(position);
maMap.getOverlays().add(marker);
答案 1 :(得分:0)
当位置发生变化时,您的代码将被异步调用,例如位置更改时调用方法onLocationChanged()
。
因此,您应该将所有用于位置更新的逻辑放在此方法中。
对于第一次运行代码(位置随时间变化,但您需要立即在地图上显示位置),您应该使用lmanager.getLastKnownLocation()
。