第一步:在清单文件中申请权限,以下:java
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.WAKE_LOCK"/>
而后将本身建立应用申请到的ak密钥添加到value中,android:name是固定的android
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="ZnGU2mBmhv9uPVspDK29uueDSKYLloQ4"/>
在添加一个LDB SDK服务(内容固定不变)git
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
两种方式显示定位信息
第一种:经纬度,和省市区等详细位置(定位方式必须是网络定位才能显示详细位置信息)
第二种:图型形式
activity_main.xml代码以下:web
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:id="@+id/position" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#000"/> <com.baidu.mapapi.map.MapView android:id="@+id/baiduMap" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:clickable="true" android:layout_gravity="center"/>
MainActivity.java代码以下:api
public class MainActivity extends AppCompatActivity { private MapView BaiduMap; private LocationClient Client; private TextView Position; private BaiduMap baiduMap;//地图总控制器 private boolean isFirstLocate = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //必定要在setContentView()前调用 SDKInitializer.initialize(getApplicationContext()); Client = new LocationClient(getApplicationContext());//获取全局Context Client.registerLocationListener(new MyLocationListener());//注册一个定位监听器,获取位置信息,回调此定位监听器 setContentView(R.layout.activity_main); BaiduMap = (MapView) findViewById(R.id.baiduMap); Position = (TextView) findViewById(R.id.position); List<String> PermissionList = new ArrayList<>(); baiduMap = BaiduMap.getMap();//获取实例,能够对地图进行一系列操做,好比:缩放范围,移动地图 baiduMap.setMyLocationEnabled(true);//容许当前设备显示在地图上 //判断权限是否受权 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED){ PermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED){ PermissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ PermissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!PermissionList.isEmpty()){ String[] Permissions = PermissionList.toArray(new String[PermissionList.size()]);//转化为数组 ActivityCompat.requestPermissions(MainActivity.this,Permissions,1);//一次性申请权限 }else { requestLocation(); } } private void navigateTo(BDLocation location){ if (isFirstLocate){ LatLng lng = new LatLng(location.getLatitude(),location.getLongitude());//指定经纬度 MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(lng); baiduMap.animateMapStatus(update); update = MapStatusUpdateFactory.zoomTo(16f);//百度地图缩放级别限定在3-19 baiduMap.animateMapStatus(update); isFirstLocate = false; } MyLocationData.Builder builder = new MyLocationData.Builder(); builder.latitude(location.getLatitude()); builder.longitude(location.getLongitude()); MyLocationData locationData = builder.build(); baiduMap.setMyLocationData(locationData); } private void requestLocation(){ InitLocation(); Client.start(); } /* * LBS SKD定位模式 * 1:Hight_Accuracy:高精确模式,优先使用GPS定位,其次使用网络定位 * 2:Battery_Saving:节电模式,使用网络定位 * 3:Device_Sensors:传感器模式,使用GPS * */ private void InitLocation(){ LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//高精确模式 option.setScanSpan(5000);//ms option.setIsNeedAddress(true);//获取详细信息许可 Client.setLocOption(option); } @Override protected void onDestroy() { super.onDestroy(); Client.stop(); BaiduMap.onDestroy(); baiduMap.setMyLocationEnabled(false); } @Override protected void onResume() { super.onResume(); BaiduMap.onResume(); } @Override protected void onPause() { super.onPause(); BaiduMap.onPause(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults.length > 0){ for (int result : grantResults){ if (result != PackageManager.PERMISSION_GRANTED){ Toast.makeText(this,"必须赞成全部权限才能使用本程序",Toast.LENGTH_SHORT).show(); finish(); return; } } requestLocation(); }else { Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show(); finish(); } break; default: } } public class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation bdLocation) { if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){ navigateTo(bdLocation); } StringBuilder currentPosition = new StringBuilder(); currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n"); currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n"); currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n"); currentPosition.append("省:").append(bdLocation.getProvince()).append("\n"); currentPosition.append("市/县:").append(bdLocation.getCity()).append("\n"); currentPosition.append("区/乡:").append(bdLocation.getDistrict()).append("\n"); currentPosition.append("街道/村:").append(bdLocation.getStreet()).append("\n"); currentPosition.append("定位方式:"); if (bdLocation.getLocType() == BDLocation.TypeGpsLocation){ currentPosition.append("GPS"); }else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){ currentPosition.append("网络"); } Position.setText(currentPosition); } } }