baidu map java api

https://blog.csdn.net/crazy1235/article/details/42614603Android百度地图开发(一)之初体验

 

https://blog.csdn.net/pan960821/article/details/50914000

手把手教你实现百度基础地图+定位功能+设置中心点+添加Marker

 

配置环境

1.获取AppKey

1.创建应用地址:http://lbsyun.baidu.com/apiconsole/key

 

2.创建应用:

3.获取SHA1值,首先cmd打开dos窗口

 

4.cd .android 切换到 .android目录

 

 

5.使用keytool -list -v -keystore debug.keystore获取指纹整数中的SHA1值,输入口令直接回车或者输入android即可:

 

6.得到的指纹整数SHA1值

 

7.获取应用的包名(PackageName):

这个是包名 PackageName

8.把SHA1和PackageName放到对应的位置点击确定,得到APPKEY

 

2.配置AndroidManifest.xml文件

1.设置你的APPKEY

 
  1. <meta-data

  2. android:name="com.baidu.lbsapi.API_KEY"

  3. android:value="你的 AppKey" />

 

 

2.添加用户权限

 
  1. <!-- 百度地图需要的权限 -->

  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  3. <uses-permission android:name="android.permission.INTERNET" />

  4. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

  5. <uses-permission android:name="android.permission.WAKE_LOCK" />

  6. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  8. <uses-permission android:name="android.permission.GET_TASKS" />

  9. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  10. <uses-permission android:name="android.permission.WRITE_SETTINGS" />

 

3.基础地图实现

效果图

1.在布局文件添加地图控件

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. xmlns:tools="http://schemas.android.com/tools"

  4. android:layout_width="match_parent"

  5. android:layout_height="match_parent"

  6. tools:context="com.demo.baidumapblog.ShowMapActivity">

  7.  
  8. <com.baidu.mapapi.map.MapView

  9. android:id="@+id/bmapView"

  10. android:layout_width="fill_parent"

  11. android:layout_height="fill_parent"

  12. android:clickable="true" />

  13.  
  14. </RelativeLayout>

 

2.初始化地图控件并管理控件的生命周期

 
  1. package com.demo.baidumapblog;

  2.  
  3. import android.support.v7.app.AppCompatActivity;

  4. import android.os.Bundle;

  5.  
  6. import com.baidu.mapapi.SDKInitializer;

  7. import com.baidu.mapapi.map.MapView;

  8.  
  9. public class ShowMapActivity extends AppCompatActivity {

  10.  
  11. private MapView mMapView;

  12.  
  13. @Override

  14. protected void onCreate(Bundle savedInstanceState) {

  15. super.onCreate(savedInstanceState);

  16. //在使用SDK各组件之前初始化context信息,传入ApplicationContext

  17. //注意该方法要再setContentView方法之前实现

  18. //使用百度地图的任何功能都需要先初始化这段代码 最好放在全局中进行初始化

  19. //百度地图+定位+marker比较简单 我就不放到全局去了

  20. SDKInitializer.initialize(getApplicationContext());

  21. setContentView(R.layout.activity_show_map);

  22. //获取地图控件引用

  23. mMapView = (MapView) findViewById(R.id.bmapView);

  24. }

  25.  
  26. /**

  27. * 必须要实现

  28. */

  29. @Override

  30. protected void onDestroy() {

  31. super.onDestroy();

  32. //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

  33. mMapView.onDestroy();

  34. }

  35.  
  36. /**

  37. * 必须要实现

  38. */

  39. @Override

  40. protected void onResume() {

  41. super.onResume();

  42. //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

  43. mMapView.onResume();

  44. }

  45.  
  46. /**

  47. * 必须要实现

  48. */

  49. @Override

  50. protected void onPause() {

  51. super.onPause();

  52. //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

  53. mMapView.onPause();

  54. }

  55. }

 

4.实现定位功能

效果图  和基础地图没有什么区别 因为没有加中心点以及marker 但是已经获取到了经纬度坐标

1.在AndroidManifest.xml中注册广播  注意这个广播一定要注册 否则定位会失败

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

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. <!-- 用于读取手机当前的状态-->

  6. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

  7. <!-- SD卡读取权限,用户写入离线定位数据-->

  8. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

 

3.正式写代码 定位功能的全部代码:

 
  1. package com.demo.baidumapblog;

  2.  
  3. import android.support.v7.app.AppCompatActivity;

  4. import android.os.Bundle;

  5. import android.util.Log;

  6.  
  7. import com.baidu.location.BDLocation;

  8. import com.baidu.location.BDLocationListener;

  9. import com.baidu.location.LocationClient;

  10. import com.baidu.location.LocationClientOption;

  11. import com.baidu.location.Poi;

  12. import com.baidu.mapapi.SDKInitializer;

  13. import com.baidu.mapapi.map.MapView;

  14.  
  15. import java.util.List;

  16.  
  17. public class ShowMapActivity extends AppCompatActivity {

  18.  
  19. private MapView mMapView;

  20. public LocationClient mLocationClient = null;

  21. public BDLocationListener myListener = new MyLocationListener();

  22.  
  23. @Override

  24. protected void onCreate(Bundle savedInstanceState) {

  25. super.onCreate(savedInstanceState);

  26. //在使用SDK各组件之前初始化context信息,传入ApplicationContext

  27. //注意该方法要再setContentView方法之前实现

  28. //使用百度地图的任何功能都需要先初始化这段代码 最好放在全局中进行初始化

  29. //百度地图+定位+marker比较简单 我就不放到全局去了

  30. SDKInitializer.initialize(getApplicationContext());

  31. setContentView(R.layout.activity_show_map);

  32. //获取地图控件引用

  33. mMapView = (MapView) findViewById(R.id.bmapView);

  34.  
  35. //声明LocationClient类

  36. mLocationClient = new LocationClient(getApplicationContext());

  37. //注册监听函数

  38. mLocationClient.registerLocationListener( myListener );

  39.  
  40. //配置定位参数

  41. initLocation();

  42. //开始定位

  43. mLocationClient.start();

  44. }

  45.  
  46. /**

  47. * 配置定位参数

  48. */

  49. private void initLocation(){

  50. LocationClientOption option = new LocationClientOption();

  51. option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy

  52. );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

  53. option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系

  54. int span=1000;

  55. option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

  56. option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

  57. option.setOpenGps(true);//可选,默认false,设置是否使用gps

  58. option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果

  59. option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

  60. option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

  61. option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死

  62. option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

  63. option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要

  64. mLocationClient.setLocOption(option);

  65. }

  66.  
  67. /**

  68. * 实现定位监听 位置一旦有所改变就会调用这个方法

  69. * 可以在这个方法里面获取到定位之后获取到的一系列数据

  70. */

  71. public class MyLocationListener implements BDLocationListener {

  72.  
  73. private double lat;

  74. private double lon;

  75.  
  76. @Override

  77. public void onReceiveLocation(BDLocation location) {

  78. //Receive Location

  79. StringBuffer sb = new StringBuffer(256);

  80. sb.append("time : ");

  81. sb.append(location.getTime());

  82. sb.append("\nerror code : ");

  83. sb.append(location.getLocType());

  84. sb.append("\nlatitude : ");

  85. sb.append(location.getLatitude());

  86. sb.append("\nlontitude : ");

  87. sb.append(location.getLongitude());

  88. sb.append("\nradius : ");

  89. sb.append(location.getRadius());

  90. lat = location.getLatitude();

  91. lon = location.getLongitude();

  92. if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果

  93. sb.append("\nspeed : ");

  94. sb.append(location.getSpeed());// 单位:公里每小时

  95. sb.append("\nsatellite : ");

  96. sb.append(location.getSatelliteNumber());

  97. sb.append("\nheight : ");

  98. sb.append(location.getAltitude());// 单位:米

  99. sb.append("\ndirection : ");

  100. sb.append(location.getDirection());// 单位度

  101. sb.append("\naddr : ");

  102. sb.append(location.getAddrStr());

  103. sb.append("\ndescribe : ");

  104. sb.append("gps定位成功");

  105.  
  106. } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果

  107. sb.append("\naddr : ");

  108. sb.append(location.getAddrStr());

  109. //运营商信息

  110. sb.append("\noperationers : ");

  111. sb.append(location.getOperators());

  112. sb.append("\ndescribe : ");

  113. sb.append("网络定位成功");

  114. } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果

  115. sb.append("\ndescribe : ");

  116. sb.append("离线定位成功,离线定位结果也是有效的");

  117. } else if (location.getLocType() == BDLocation.TypeServerError) {

  118. sb.append("\ndescribe : ");

  119. sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");

  120. } else if (location.getLocType() == BDLocation.TypeNetWorkException) {

  121. sb.append("\ndescribe : ");

  122. sb.append("网络不同导致定位失败,请检查网络是否通畅");

  123. } else if (location.getLocType() == BDLocation.TypeCriteriaException) {

  124. sb.append("\ndescribe : ");

  125. sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");

  126. }

  127. sb.append("\nlocationdescribe : ");

  128. sb.append(location.getLocationDescribe());// 位置语义化信息

  129. List<Poi> list = location.getPoiList();// POI数据

  130. if (list != null) {

  131. sb.append("\npoilist size = : ");

  132. sb.append(list.size());

  133. for (Poi p : list) {

  134. sb.append("\npoi= : ");

  135. sb.append(p.getId() + " " + p.getName() + " " + p.getRank());

  136. }

  137. }

  138. Log.v("pcw","lat : " + lat+" lon : " + lon);

  139. Log.i("BaiduLocationApiDem", sb.toString());

  140. }

  141. }

  142.  
  143. /**

  144. * 必须要实现

  145. */

  146. @Override

  147. protected void onDestroy() {

  148. super.onDestroy();

  149. //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

  150. mMapView.onDestroy();

  151. }

  152.  
  153. /**

  154. * 必须要实现

  155. */

  156. @Override

  157. protected void onResume() {

  158. super.onResume();

  159. //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

  160. mMapView.onResume();

  161. }

  162.  
  163. /**

  164. * 必须要实现

  165. */

  166. @Override

  167. protected void onPause() {

  168. super.onPause();

  169. //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

  170. mMapView.onPause();

  171. }

  172. }

 

4.声明LocationClient类 并注册监听函数

 
  1. //声明LocationClient类

  2. mLocationClient = new LocationClient(getApplicationContext());

  3. //注册监听函数

  4. mLocationClient.registerLocationListener( myListener );

 

5.配置定位参数

 
  1. /**

  2. * 配置定位参数

  3. */

  4. private void initLocation(){

  5. LocationClientOption option = new LocationClientOption();

  6. option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy

  7. );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

  8. option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系

  9. int span=1000;

  10. option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

  11. option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

  12. option.setOpenGps(true);//可选,默认false,设置是否使用gps

  13. option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果

  14. option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

  15. option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

  16. option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死

  17. option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

  18. option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要

  19. mLocationClient.setLocOption(option);

  20. }

 

6.实现定位监听

 
  1. /**

  2. * 实现定位监听 位置一旦有所改变就会调用这个方法

  3. * 可以在这个方法里面获取到定位之后获取到的一系列数据

  4. */

  5. public class MyLocationListener implements BDLocationListener {

  6.  
  7. private double lat;

  8. private double lon;

  9.  
  10. @Override

  11. public void onReceiveLocation(BDLocation location) {

  12. //Receive Location

  13. StringBuffer sb = new StringBuffer(256);

  14. sb.append("time : ");

  15. sb.append(location.getTime());

  16. sb.append("\nerror code : ");

  17. sb.append(location.getLocType());

  18. sb.append("\nlatitude : ");

  19. sb.append(location.getLatitude());

  20. sb.append("\nlontitude : ");

  21. sb.append(location.getLongitude());

  22. sb.append("\nradius : ");

  23. sb.append(location.getRadius());

  24. lat = location.getLatitude();

  25. lon = location.getLongitude();

  26. if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果

  27. sb.append("\nspeed : ");

  28. sb.append(location.getSpeed());// 单位:公里每小时

  29. sb.append("\nsatellite : ");

  30. sb.append(location.getSatelliteNumber());

  31. sb.append("\nheight : ");

  32. sb.append(location.getAltitude());// 单位:米

  33. sb.append("\ndirection : ");

  34. sb.append(location.getDirection());// 单位度

  35. sb.append("\naddr : ");

  36. sb.append(location.getAddrStr());

  37. sb.append("\ndescribe : ");

  38. sb.append("gps定位成功");

  39.  
  40. } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果

  41. sb.append("\naddr : ");

  42. sb.append(location.getAddrStr());

  43. //运营商信息

  44. sb.append("\noperationers : ");

  45. sb.append(location.getOperators());

  46. sb.append("\ndescribe : ");

  47. sb.append("网络定位成功");

  48. } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果

  49. sb.append("\ndescribe : ");

  50. sb.append("离线定位成功,离线定位结果也是有效的");

  51. } else if (location.getLocType() == BDLocation.TypeServerError) {

  52. sb.append("\ndescribe : ");

  53. sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");

  54. } else if (location.getLocType() == BDLocation.TypeNetWorkException) {

  55. sb.append("\ndescribe : ");

  56. sb.append("网络不同导致定位失败,请检查网络是否通畅");

  57. } else if (location.getLocType() == BDLocation.TypeCriteriaException) {

  58. sb.append("\ndescribe : ");

  59. sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");

  60. }

  61. sb.append("\nlocationdescribe : ");

  62. sb.append(location.getLocationDescribe());// 位置语义化信息

  63. List<Poi> list = location.getPoiList();// POI数据

  64. if (list != null) {

  65. sb.append("\npoilist size = : ");

  66. sb.append(list.size());

  67. for (Poi p : list) {

  68. sb.append("\npoi= : ");

  69. sb.append(p.getId() + " " + p.getName() + " " + p.getRank());

  70. }

  71. }

  72. Log.v("pcw","lat : " + lat+" lon : " + lon);

  73. Log.i("BaiduLocationApiDem", sb.toString());

  74. }

  75. }

 

5.设置中心点和marker

效果图

1.基础地图+定位+设置中心点+marker 所有代码

 

 
  1. package com.demo.baidumapblog;

  2.  
  3. import android.os.Handler;

  4. import android.os.Message;

  5. import android.support.v7.app.AppCompatActivity;

  6. import android.os.Bundle;

  7. import android.util.Log;

  8.  
  9. import com.baidu.location.BDLocation;

  10. import com.baidu.location.BDLocationListener;

  11. import com.baidu.location.LocationClient;

  12. import com.baidu.location.LocationClientOption;

  13. import com.baidu.location.Poi;

  14. import com.baidu.mapapi.SDKInitializer;

  15. import com.baidu.mapapi.map.BaiduMap;

  16. import com.baidu.mapapi.map.BitmapDescriptor;

  17. import com.baidu.mapapi.map.BitmapDescriptorFactory;

  18. import com.baidu.mapapi.map.MapStatus;

  19. import com.baidu.mapapi.map.MapStatusUpdate;

  20. import com.baidu.mapapi.map.MapStatusUpdateFactory;

  21. import com.baidu.mapapi.map.MapView;

  22. import com.baidu.mapapi.map.MarkerOptions;

  23. import com.baidu.mapapi.map.OverlayOptions;

  24. import com.baidu.mapapi.model.LatLng;

  25.  
  26. import java.util.List;

  27.  
  28. public class ShowMapActivity extends AppCompatActivity {

  29.  
  30. private MapView mMapView;

  31.  
  32. private boolean isFirstLocation = true;

  33.  
  34. public LocationClient mLocationClient = null;

  35. public BDLocationListener myListener = new MyLocationListener();

  36. private BaiduMap mBaiduMap;

  37.  
  38. private double lat;

  39. private double lon;

  40.  
  41.  
  42. @Override

  43. protected void onCreate(Bundle savedInstanceState) {

  44. super.onCreate(savedInstanceState);

  45. //在使用SDK各组件之前初始化context信息,传入ApplicationContext

  46. //注意该方法要再setContentView方法之前实现

  47. //使用百度地图的任何功能都需要先初始化这段代码 最好放在全局中进行初始化

  48. //百度地图+定位+marker比较简单 我就不放到全局去了

  49. SDKInitializer.initialize(getApplicationContext());

  50. setContentView(R.layout.activity_show_map);

  51. //获取地图控件引用

  52. mMapView = (MapView) findViewById(R.id.bmapView);

  53. //获取BaiduMap对象

  54. mBaiduMap = mMapView.getMap();

  55. //声明LocationClient类

  56. mLocationClient = new LocationClient(getApplicationContext());

  57. //注册监听函数

  58. mLocationClient.registerLocationListener(myListener);

  59.  
  60. //配置定位参数

  61. initLocation();

  62. //开始定位

  63. mLocationClient.start();

  64.  
  65. }

  66.  
  67.  
  68. /**

  69. * 添加marker

  70. */

  71. private void setMarker() {

  72. Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);

  73. //定义Maker坐标点

  74. LatLng point = new LatLng(lat, lon);

  75. //构建Marker图标

  76. BitmapDescriptor bitmap = BitmapDescriptorFactory

  77. .fromResource(R.drawable.location_marker);

  78. //构建MarkerOption,用于在地图上添加Marker

  79. OverlayOptions option = new MarkerOptions()

  80. .position(point)

  81. .icon(bitmap);

  82. //在地图上添加Marker,并显示

  83. mBaiduMap.addOverlay(option);

  84. }

  85.  
  86. /**

  87. * 设置中心点

  88. */

  89. private void setUserMapCenter() {

  90. Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);

  91. LatLng cenpt = new LatLng(lat,lon);

  92. //定义地图状态

  93. MapStatus mMapStatus = new MapStatus.Builder()

  94. .target(cenpt)

  95. .zoom(18)

  96. .build();

  97. //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化

  98. MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);

  99. //改变地图状态

  100. mBaiduMap.setMapStatus(mMapStatusUpdate);

  101.  
  102. }

  103.  
  104. /**

  105. * 配置定位参数

  106. */

  107. private void initLocation(){

  108. LocationClientOption option = new LocationClientOption();

  109. option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy

  110. );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

  111. option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系

  112. int span=1000;

  113. option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

  114. option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

  115. option.setOpenGps(true);//可选,默认false,设置是否使用gps

  116. option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果

  117. option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

  118. option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

  119. option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死

  120. option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

  121. option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要

  122. mLocationClient.setLocOption(option);

  123. }

  124.  
  125. /**

  126. * 实现定位监听 位置一旦有所改变就会调用这个方法

  127. * 可以在这个方法里面获取到定位之后获取到的一系列数据

  128. */

  129. public class MyLocationListener implements BDLocationListener {

  130.  
  131. @Override

  132. public void onReceiveLocation(BDLocation location) {

  133. //Receive Location

  134. StringBuffer sb = new StringBuffer(256);

  135. sb.append("time : ");

  136. sb.append(location.getTime());

  137. sb.append("\nerror code : ");

  138. sb.append(location.getLocType());

  139. sb.append("\nlatitude : ");

  140. sb.append(location.getLatitude());

  141. sb.append("\nlontitude : ");

  142. sb.append(location.getLongitude());

  143. sb.append("\nradius : ");

  144. sb.append(location.getRadius());

  145.  
  146. if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果

  147. sb.append("\nspeed : ");

  148. sb.append(location.getSpeed());// 单位:公里每小时

  149. sb.append("\nsatellite : ");

  150. sb.append(location.getSatelliteNumber());

  151. sb.append("\nheight : ");

  152. sb.append(location.getAltitude());// 单位:米

  153. sb.append("\ndirection : ");

  154. sb.append(location.getDirection());// 单位度

  155. sb.append("\naddr : ");

  156. sb.append(location.getAddrStr());

  157. sb.append("\ndescribe : ");

  158. sb.append("gps定位成功");

  159.  
  160. } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果

  161. sb.append("\naddr : ");

  162. sb.append(location.getAddrStr());

  163. //运营商信息

  164. sb.append("\noperationers : ");

  165. sb.append(location.getOperators());

  166. sb.append("\ndescribe : ");

  167. sb.append("网络定位成功");

  168. } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果

  169. sb.append("\ndescribe : ");

  170. sb.append("离线定位成功,离线定位结果也是有效的");

  171. } else if (location.getLocType() == BDLocation.TypeServerError) {

  172. sb.append("\ndescribe : ");

  173. sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");

  174. } else if (location.getLocType() == BDLocation.TypeNetWorkException) {

  175. sb.append("\ndescribe : ");

  176. sb.append("网络不同导致定位失败,请检查网络是否通畅");

  177. } else if (location.getLocType() == BDLocation.TypeCriteriaException) {

  178. sb.append("\ndescribe : ");

  179. sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");

  180. }

  181. sb.append("\nlocationdescribe : ");

  182. sb.append(location.getLocationDescribe());// 位置语义化信息

  183. List<Poi> list = location.getPoiList();// POI数据

  184. if (list != null) {

  185. sb.append("\npoilist size = : ");

  186. sb.append(list.size());

  187. for (Poi p : list) {

  188. sb.append("\npoi= : ");

  189. sb.append(p.getId() + " " + p.getName() + " " + p.getRank());

  190. }

  191. }

  192. lat = location.getLatitude();

  193. lon = location.getLongitude();

  194.  
  195. //这个判断是为了防止每次定位都重新设置中心点和marker

  196. if(isFirstLocation){

  197. isFirstLocation = false;

  198. setMarker();

  199. setUserMapCenter();

  200. }

  201. Log.v("pcw","lat : " + lat+" lon : " + lon);

  202. Log.i("BaiduLocationApiDem", sb.toString());

  203. }

  204. }

  205.  
  206. /**

  207. * 必须要实现

  208. */

  209. @Override

  210. protected void onDestroy() {

  211. super.onDestroy();

  212. //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

  213. mMapView.onDestroy();

  214. }

  215.  
  216. /**

  217. * 必须要实现

  218. */

  219. @Override

  220. protected void onResume() {

  221. super.onResume();

  222. //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

  223. mMapView.onResume();

  224. }

  225.  
  226. /**

  227. * 必须要实现

  228. */

  229. @Override

  230. protected void onPause() {

  231. super.onPause();

  232. //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

  233. mMapView.onPause();

  234. }

  235. }

2.设置中心点的代码:

 
  1. /**

  2. * 设置中心点

  3. */

  4. private void setUserMapCenter() {

  5. Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);

  6. LatLng cenpt = new LatLng(lat,lon);

  7. //定义地图状态

  8. MapStatus mMapStatus = new MapStatus.Builder()

  9. .target(cenpt)

  10. .zoom(18)

  11. .build();

  12. //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化

  13. MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);

  14. //改变地图状态

  15. mBaiduMap.setMapStatus(mMapStatusUpdate);

  16.  
  17. }

3.添加marker:

 
  1. /**

  2. * 添加marker

  3. */

  4. private void setMarker() {

  5. Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);

  6. //定义Maker坐标点

  7. LatLng point = new LatLng(lat, lon);

  8. //构建Marker图标

  9. BitmapDescriptor bitmap = BitmapDescriptorFactory

  10. .fromResource(R.drawable.location_marker);

  11. //构建MarkerOption,用于在地图上添加Marker

  12. OverlayOptions option = new MarkerOptions()

  13. .position(point)

  14. .icon(bitmap);

  15. //在地图上添加Marker,并显示

  16. mBaiduMap.addOverlay(option);

  17. }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值