2016-02-29 73 views
0

我的代码完全正常,我想在应用程序打开后立即获取用户在地图上的位置。但该应用程序只是崩溃。此外,该程序设置为更新位置,并在其更改后立即添加标记,这也不起作用。这里的代码试图获取用户在Android的地图上的位置

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener { 

    private GoogleMap mMap; 
    LocationManager locationManager; 
    String provider; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     provider = locationManager.getBestProvider(new Criteria(), false); 

    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     Location location= locationManager.getLastKnownLocation(provider); 
     double lat =location.getLatitude(); 
     double lng =location.getLongitude(); 
     mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker")); 

     // Add a marker and move the camera 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Double lat = location.getLatitude(); 
     Double lng = location.getLongitude(); 
     mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker")); 
     mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10)); 
     Log.i("Latitude", lat.toString()); 

    } 
+2

你可以发布崩溃日志吗? –

回答

0

试试这个。 getLastKnownLocation返回如果位置是有缓存否则返回null 增加一个检查有

if(location!=null) 
{ 
double lat =location.getLatitude(); 
double lng =location.getLongitude(); 
mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).title("Marker")); 
} 

2溶液使用谷歌播放服务fusedlocation API实现更好的管理与位置这里指http://coderzpassion.com/android-location-using-google-play-services/

3试试这addMarker

public void drawMarker(double lat,double lon) 
{ 
    if (mMap != null) { 
     MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lon)).title(" Maps Tutorial").snippet("Android Ruler"); 
     marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 
// Moving Camera to a Location with animation 
     CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(latitude, longitude)).zoom(12).build(); 
     mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
     mMap.addMarker(marker); 
    } 
} 

更多详细信息请点击这里http://coderzpassion.com/android-google-maps-v2-tutorial-with-markers/

+0

我也使用过这个,但应用程序只是崩溃,即时通讯在一个Oneplus上运行它与marshamallow 6.0.1 –

+0

事情是,无论如何没有标记出现在地图上(如果它运行)或它只是一旦崩溃已启动。为什么在地图上的任何地方都没有标记,我的位置服务在每个设置上都是完全正确的。 –

+0

@KunalYadav检查位置提供程序是否已启用。如果启用,那么只有代码获取位置 –

相关问题