地理位置在android中不起作用

时间:2011-09-05 07:52:51

标签: android google-maps geolocation

我有问题,我想使用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"/>

我不知道有什么问题?

2 个答案:

答案 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()