每当我尝试使用设置标记按钮时,都会设置一个标记,但只是在错误的位置。当我点击 googleMap.setMyLocationEnabled(true) 提供的按钮时,地图会移动到确切位置的蓝点。它如何获得当前位置而我得到一个随机位置?
package com.example.googlemaps;
//import java.io.IOException;
//import java.util.List;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
//import android.location.Address;
import android.location.Criteria;
//import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
//import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
private GoogleMap googleMap;
double currentLat, currentLong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpMapIfNeeded();
Button setLocMarker = (Button)findViewById(R.id.set_marker);
setLocMarker.setOnClickListener(setMarkerLocation);
}
private OnClickListener setMarkerLocation = new OnClickListener(){
public void onClick(View v) {
setMarker(currentLat, currentLong);
}
};
private void setUpMapIfNeeded(){
// Do a null check to confirm that we have not already instantiated the map.
if(googleMap == null){
//Try to obtain the map from the SupportMapFragment
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
//check if we were successful in obtaining the map
if(googleMap != null){
setUpMap();
}
}
}
private void setUpMap() {
getCurrentLocation();
//set map type
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID );
//creates a LatLng object for current location
LatLng latLng = new LatLng(currentLat, currentLong);
//show the current location in Google Map
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
//Zoom in the Google Map
googleMap.animateCamera(CameraUpdateFactory.zoomTo(20));
//setMarker(latitude, longitude);
}
public void getCurrentLocation()
{
//Enable MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
//Get LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//Create a criteria object to retrieve provider
Criteria criteria = new Criteria();
//Get the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
//Get Current Location
Location myLocation = locationManager.getLastKnownLocation(provider);
//Get latitude of current location
currentLat = myLocation.getLatitude();
//Get longitude of current location
currentLong = myLocation.getLongitude();
}
public void setMarker(double latitude, double longitude){
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("Your set Marker!"));
}
// public void getLocFromAddress(String address){
//
// final Geocoder geoCoder = new Geocoder();
//
//
// try{
// List<Address> addresses = geoCoder.getFromLocationName(address, 1);
// if(addresses.size() > 0){
// double latitude = addresses.get(0).getLatitude();
// double longitude = addresses.get(0).getLongitude();
// }
// }catch(IOException e){
//
// }
//
//
//
// }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}