如何在地图活动启动时通过GPS或WiFi获取当前位置



我必须在MapActivity启动时加载当前设备位置(它从另一个活动启动的Intent开始).
问题是环顾网络和Android开发人员部分,我看到我必须在LocationChange(location)上使用LocationListener方法,但我必须在MapActivity开始时获取用户位置,而不是在用户更改其位置时。我已经尝试过隔离方法,但我没有找到解决方案。

public class MappaActivity extends MapActivity {
MapView miaMapView;
MapController mc;
LocationManager lm;
GeoPoint actualP;
LocationListener locationListener;
@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_mappa_activity);
    miaMapView=(MapView)findViewById(R.id.miaMapView);
    mc=miaMapView.getController();
    miaMapView.setBuiltInZoomControls(true);
    miaMapView.setSatellite(true);
    miaMapView.invalidate();
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationListener=new MyLocationListener();
    lm.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener);

//  This is MyLocationListener inner class:

private class MyLocationListener implements LocationListener{
    @Override
    public void onLocationChanged(Location location) {
        if(location!=null){
            actualP = new
                    GeoPoint(
                    (int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
            mc.animateTo(actualP);
            mc.setZoom(10);
        }
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
    }
}
}

实际P保持为空,在更改用户位置之前不会触发onLocationChanged方法。

我也尝试了 locationManager.getLastKnowLocation(location.GPS_PROVIDER),但它返回空值。

我希望能找到一些帮助,谢谢!

您的GPS_PROVIDER可能无法获取位置

当您的GPS_PROVIDER无法为您提供位置时,如果您还使用NETWORK_PROVIDER和PASSIVE_PROVIDER来获取位置会更好

也使用 lm.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0,locationListener);

和 lm.requestLocationUpdates( LocationManager.PASSIVE_PROVIDER, 0, 0,locationListener); 可能它们不如GPS_PROVIDER那么准确。

最新更新