在开始时获取当前位置

时间:2016-02-01 09:26:45

标签: java android google-maps gps

我需要使用gps显示用户当前位置。在启动时它会在海中显示一些随机位置,当我点击gps图标时,它会显示我当前的位置(带有光学图标的白色圆圈)enter image description here。 如何在启动时显示?我是android / java的新手,所以随时都可以纠正我。

我的代码是:

public class MainMapsActivity extends FragmentActivity implements android.location.LocationListener {

    GoogleMap googleMap;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_maps);


        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);


        googleMap = fm.getMap();


        googleMap.setMyLocationEnabled(true);



        LocationManager locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);


        Criteria criteria = new Criteria();


        String provider = locationManager.getBestProvider(criteria, true);


        Location location = locationManager.getLastKnownLocation(provider);

        if(location!=null){
            onLocationChanged(location);
        }



        locationManager.requestLocationUpdates(provider, 20000, 0, this);
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
    }


    @Override
    public void onLocationChanged(Location location) {

        TextView tvLocation = (TextView) findViewById(R.id.tv_location);


        double latitude = location.getLatitude();


        double longitude = location.getLongitude();


        LatLng latLng = new LatLng(latitude, longitude);


        googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));


        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));


        tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude );

    }
}

2 个答案:

答案 0 :(得分:3)

创建Location类的数据成员。

  public static Location mLocation;

在地图上使用OnMyLocationChangeListener

   mMap.setOnMyLocationChangeListener(new   GoogleMap.OnMyLocationChangeListener() {
        @Override
        public void onMyLocationChange(Location location) {
            mLocation = location;
                displayCurrentLocation();
        }
    });

      public  void displayCurrentLocation(){
    CameraPosition cameraPosition = new CameraPosition.Builder().
            target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
            tilt(60).
            zoom(15).
            bearing(0).
            build();
       mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
希望它能起作用。

答案 1 :(得分:1)

您可以通过两种方式实现这一目标

  • 在进入目标屏幕之前,运行服务(后台操作)并在应用程序启动时获取当前经度和经度
  • 公开您可以从“活动”
  • 访问的服务方法
  • 从服务方法输入
  • 显示用户当前位置
  • 或者实现一个每次更新用户当前位置的监听器

您可以参考以下Example 1Example 2