0

再会,

目前我正在创建一个 Android 应用程序,它将向用户显示他们在地图上的当前位置。遗憾的是,我似乎无法在 OnCreate 方法中放大用户的当前位置。它似乎在 OnMapClick 方法中工作。

我想摆脱 OnMapClick 方法并在加载地图时显示用户的当前位置。

下面的代码是地图类的 OnCreate 方法的一部分

Settings setting = new Settings();
    setting.saveSettings(Maps.this);
    LocationManager locationManager =(LocationManager) getSystemService(Context.LOCATION_SERVICE);

这是 OnLocationChanged 方法的代码

public void onLocationChanged(Location location) {
    int lat = (int)(location.getLatitude());
    int lng =(int)(location.getLongitude());
    LatLng loc = new LatLng(lat,lng);
    myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 15));
    myMap.animateCamera(CameraUpdateFactory.zoomIn());

我拥有一个 API 密钥并在我的应用程序中有地图。

4

3 回答 3

1

这段代码可以帮助你...

我的听众

私有 LocationListener 监听器 = new LocationListener() {

  @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

   @Override
    public void onProviderEnabled(String provider) {
    }

   @Override
    public void onProviderDisabled(String provider) {
    }

   @Override
    public void onLocationChanged(Location loc) {
    // will get the location lat long
    }
};

启动位置管理器更新侦听器的代码

LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (mLocationManager != null) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);
            String prividerName = mLocationManager.getBestProvider(criteria, true);
            if (prividerName != null) {
                mLocationManager.requestLocationUpdates(prividerName, 30 * 1000, 0, listener);

获得纬度/经度后,您可以绘制位置详细信息,如下所示

GoogleMap googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
            R.id.map)).getMap();
LatLng current = new LatLng(mUserLatitude, mUserLongitude);
googleMap.addMarker(new MarkerOptions().position(current).title("Current Location"))
            .showInfoWindow();
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(current, 10));
于 2013-07-03T13:33:16.977 回答
0

我希望这段代码可以帮助澄清我的问题。

下面的代码是我的 LocationListener

private LocationListener listener = new LocationListener() {
      @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

       @Override
        public void onProviderEnabled(String provider) {
        }

       @Override
        public void onProviderDisabled(String provider) {
        }

       @Override
        public void onLocationChanged(Location loc) {
           double lat = loc.getLatitude();
           double lng = loc.getLongitude();


        }
    };

纬度和经度保存在另一个类中,下面的代码显示了我初始化地图的方式。

    String locLat = ((Settings)this.getApplication()).getLat();
    String locLng = ((Settings) this.getApplication()).getLng();
    double DlocLat = Double.parseDouble(locLat);
    double DlocLng = Double.parseDouble(locLng);

    myMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    LatLng current = new LatLng(DlocLat,DlocLng);
    myMap.addMarker(new MarkerOptions().position(current).title("Current Location")).showInfoWindow();
    myMap.setMyLocationEnabled(true);//show the location on the map
    myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);//show the regular google maps
    myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(current, 10));
于 2013-07-04T13:54:10.530 回答
0

您可能还没有修复该位置。我建议做

myMap.setMyLocationEnabled(true);
myMap.setOnMyLocationChangeListener(this);

然后在您onLocationChanged为第一次加载或其他内容中放置一个布尔值,这样它就不会在每次位置更改时都转到该位置,然后在那里进行相机移动

于 2013-07-03T13:46:54.373 回答