Android百度地图API集成二《定位》

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述Android百度地图API集成二《定位》相关的知识,希望能为你提供帮助。
书接上回  ↑
【Android百度地图API集成二《定位》】基础地图请查看android百度地图API集成一《基础地图》: 地址http://www.cnblogs.com/dhr125/p/5969980.html
1.在Application标签中声明SERVICE组件

< service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> < /service>

 
2.声明使用权限
1 < !-- 这个权限用于进行网络定位--> 2 < uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> < /uses-permission> 3 < !-- 这个权限用于访问GPS定位--> 4 < uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> < /uses-permission> 5 < !-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> 6 < uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> < /uses-permission> 7 < !-- 获取运营商信息,用于支持提供运营商信息相关的接口--> 8 < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> < /uses-permission> 9 < !-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> 10 < uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> < /uses-permission> 11 < !-- 用于读取手机当前的状态--> 12 < uses-permission android:name="android.permission.READ_PHONE_STATE"> < /uses-permission> 13 < !-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> 14 < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> < /uses-permission> 15 < !-- 访问网络,网络定位需要上网--> 16 < uses-permission android:name="android.permission.INTERNET" /> 17 < !-- SD卡读取权限,用户写入离线定位数据--> 18 < uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"> < /uses-permission>

 
3.到解压出的实例代码出找到LocationDemo.java,复制代码后如下
1 package com.example.baidumap; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 6 import com.baidu.location.BDLocation; 7 import com.baidu.location.BDLocationListener; 8 import com.baidu.location.LocationClient; 9 import com.baidu.location.LocationClientOption; 10 import com.baidu.mapapi.SDKInitializer; 11 import com.baidu.mapapi.map.BaiduMap; 12 import com.baidu.mapapi.map.MapStatus; 13 import com.baidu.mapapi.map.MapStatusUpdateFactory; 14 import com.baidu.mapapi.map.MapView; 15 import com.baidu.mapapi.map.MyLocationData; 16 import com.baidu.mapapi.model.LatLng; 17 18 public class MainActivity extends AppCompatActivity { 19 20private MapView mMapView; 21private BaiduMap mBaiduMap; 22private LocationClient mLocClient; 23public MyLocationListenner myListener = new MyLocationListenner(); 24boolean isFirstLoc = true; // 是否首次定位 25 26 27@Override 28protected void onCreate(Bundle savedInstanceState) { 29super.onCreate(savedInstanceState); 30//在使用SDK各组件之前初始化context信息,传入ApplicationContext 31//注意该方法要再setContentView方法之前实现 32SDKInitializer.initialize(getApplicationContext()); 33setContentView(R.layout.activity_main); 34//获取地图控件引用 35mMapView = (MapView) findViewById(R.id.bmapView);

/************************************ 从这里开始是在locationdemo.java中复制的,然后根据报错,缺什么补什么**************************************************************/ 36mBaiduMap = mMapView.getMap(); 37// 开启定位图层 38mBaiduMap.setMyLocationEnabled(true); 39// 定位初始化 40mLocClient = new LocationClient(this); 41mLocClient.registerLocationListener(myListener); 42LocationClientOption option = new LocationClientOption(); 43option.setOpenGps(true); // 打开gps 44option.setCoorType("bd09ll"); // 设置坐标类型 45option.setScanSpan(1000); 46mLocClient.setLocOption(option); 47mLocClient.start();
/****************************************************************************************************/ 48} 49 50/** 51* 定位SDK监听函数 52*/ 53public class MyLocationListenner implements BDLocationListener { 54 55@Override 56public void onReceiveLocation(BDLocation location) { 57// map view 销毁后不在处理新接收的位置 58if (location == null || mMapView == null) { 59return; 60} 61MyLocationData locData = https://www.songbingjia.com/android/new MyLocationData.Builder() 62.accuracy(location.getRadius()) 63// 此处设置开发者获取到的方向信息,顺时针0-360 64.direction(100).latitude(location.getLatitude()) 65.longitude(location.getLongitude()).build(); 66mBaiduMap.setMyLocationData(locData); 67if (isFirstLoc) { 68isFirstLoc = false; 69LatLng ll = new LatLng(location.getLatitude(), 70location.getLongitude()); 71MapStatus.Builder builder = new MapStatus.Builder(); 72builder.target(ll).zoom(18.0f); 73mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); 74} 75} 76 77public void onReceivePoi(BDLocation poiLocation) { 78} 79} 80 81@Override 82protected void onDestroy() { 83super.onDestroy(); 84//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 85mMapView.onDestroy(); 86} 87@Override 88protected void onResume() { 89super.onResume(); 90//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 91mMapView.onResume(); 92} 93@Override 94protected void onPause() { 95super.onPause(); 96//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 97mMapView.onPause(); 98} 99 }

 
以上,运行代码即可在地图上显示出你的当前位置
注意:如果,运行代码出现的是定位到一片蓝色的区域,当你将地图缩小后,会发现定位在海洋里或其他地方
1.检查各个步骤有没有错误,尤其是jar包,有没有引用
2.如果是模拟器,那就换成真机测试
3.如果是真机,检查手机系统是否是6.0及以上,如果是:在build.gradle中,将targetSdkVersion 改为22
 




    推荐阅读