首页 > 代码库 > 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 
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 = http://www.mamicode.com/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集成二《定位》