package com.wanghao.baidumaptest; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; import java.util.List; public class MainActivity extends AppCompatActivity { private MapView mapView = null; private BaiduMap baiduMap; private LocationManager locationManager; private String provider; private boolean isFirstLocate = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext());//百度SDK初始化一定放在swtView前面 setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map_view);//获取mapVIew实例; baiduMap = mapView.getMap(); baiduMap.setMyLocationEnabled(true);//启动百度地图的位置功能,要再onDestroy中改false来关闭 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取位置管理器实例 List<String> providerList = locationManager.getProviders(true);//简单判断手机选用的位置服务 if (providerList.contains(LocationManager.GPS_PROVIDER)) { provider = LocationManager.GPS_PROVIDER; Toast.makeText(this, "GPS", Toast.LENGTH_SHORT).show(); } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) { provider = LocationManager.NETWORK_PROVIDER; Toast.makeText(this, "net", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show(); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; }//studio自带的检查,可以不管 Location location = locationManager.getLastKnownLocation(provider);//获取位置的实例 if (location != null) { navigateTO(location); }else { Toast.makeText(this,"null",Toast.LENGTH_LONG).show(); } locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);//注册位置监听器,每次改变会调用change方法 } private void navigateTO(Location location) { if (isFirstLocate) { LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());//百度封装的经纬度类,实例 MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);//地图状态更新 baiduMap.animateMapStatus(update);//实现更新屏幕 update = MapStatusUpdateFactory.zoomTo(16f);//地图缩放3——19,越大越精准 baiduMap.animateMapStatus(update); isFirstLocate = false;//第一次定位后,就不需要再进入 } MyLocationData.Builder locationBuilder = new MyLocationData.Builder();//封装当前所在位置 locationBuilder.latitude(location.getLatitude()); locationBuilder.longitude(location.getLongitude()); MyLocationData locationData = locationBuilder.build(); baiduMap.setMyLocationData(locationData);//让当前位置以图标显示在地图上 } LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (location != null) { navigateTO(location); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; @Override protected void onDestroy() { super.onDestroy(); baiduMap.setMyLocationEnabled(false); mapView.onDestroy(); if (locationManager != null) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } locationManager.removeUpdates(locationListener);//监听器反注册 } } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } }