Android百度地图API集成二《定位》
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 20 private MapView mMapView; 21 private BaiduMap mBaiduMap; 22 private LocationClient mLocClient; 23 public MyLocationListenner myListener = new MyLocationListenner(); 24 boolean isFirstLoc = true; // 是否首次定位 25 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 //在使用SDK各组件之前初始化context信息,传入ApplicationContext 31 //注意该方法要再setContentView方法之前实现 32 SDKInitializer.initialize(getApplicationContext()); 33 setContentView(R.layout.activity_main); 34 //获取地图控件引用 35 mMapView = (MapView) findViewById(R.id.bmapView);
/************************************ 从这里开始是在locationdemo.java中复制的,然后根据报错,缺什么补什么 **************************************************************/ 36 mBaiduMap = mMapView.getMap(); 37 // 开启定位图层 38 mBaiduMap.setMyLocationEnabled(true); 39 // 定位初始化 40 mLocClient = new LocationClient(this); 41 mLocClient.registerLocationListener(myListener); 42 LocationClientOption option = new LocationClientOption(); 43 option.setOpenGps(true); // 打开gps 44 option.setCoorType("bd09ll"); // 设置坐标类型 45 option.setScanSpan(1000); 46 mLocClient.setLocOption(option); 47 mLocClient.start();
/****************************************************************************************************/ 48 } 49 50 /** 51 * 定位SDK监听函数 52 */ 53 public class MyLocationListenner implements BDLocationListener { 54 55 @Override 56 public void onReceiveLocation(BDLocation location) { 57 // map view 销毁后不在处理新接收的位置 58 if (location == null || mMapView == null) { 59 return; 60 } 61 MyLocationData locData = new MyLocationData.Builder() 62 .accuracy(location.getRadius()) 63 // 此处设置开发者获取到的方向信息,顺时针0-360 64 .direction(100).latitude(location.getLatitude()) 65 .longitude(location.getLongitude()).build(); 66 mBaiduMap.setMyLocationData(locData); 67 if (isFirstLoc) { 68 isFirstLoc = false; 69 LatLng ll = new LatLng(location.getLatitude(), 70 location.getLongitude()); 71 MapStatus.Builder builder = new MapStatus.Builder(); 72 builder.target(ll).zoom(18.0f); 73 mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); 74 } 75 } 76 77 public void onReceivePoi(BDLocation poiLocation) { 78 } 79 } 80 81 @Override 82 protected void onDestroy() { 83 super.onDestroy(); 84 //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 85 mMapView.onDestroy(); 86 } 87 @Override 88 protected void onResume() { 89 super.onResume(); 90 //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 91 mMapView.onResume(); 92 } 93 @Override 94 protected void onPause() { 95 super.onPause(); 96 //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 97 mMapView.onPause(); 98 } 99 }
以上,运行代码即可在地图上显示出你的当前位置
注意:如果,运行代码出现的是定位到一片蓝色的区域,当你将地图缩小后,会发现定位在海洋里或其他地方
1.检查各个步骤有没有错误,尤其是jar包,有没有引用
2.如果是模拟器,那就换成真机测试
3.如果是真机,检查手机系统是否是6.0及以上,如果是:在build.gradle中,将targetSdkVersion 改为22
以上是关于Android百度地图API集成二《定位》的主要内容,如果未能解决你的问题,请参考以下文章
Android定位&地图&导航——基于百度地图移动获取位置和自动定位