博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓开发_慕课网_百度地图_实现定位
阅读量:7056 次
发布时间:2019-06-28

本文共 7606 字,大约阅读时间需要 25 分钟。

学习内容来自“慕课网”

在上一学习内容的基础上改进代码,需要学习定位功能的同学请先将我的上一篇百度地图基础的学习一下

 

第一次学习百度地图的定位功能,理解不深,相应注释都在代码中写出了

MainActivity.java

1 package com.example.map;  2   3 import com.baidu.location.BDLocation;  4 import com.baidu.location.BDLocationListener;  5 import com.baidu.location.LocationClient;  6 import com.baidu.location.LocationClientOption;  7 import com.baidu.mapapi.SDKInitializer;  8 import com.baidu.mapapi.map.BaiduMap;  9 import com.baidu.mapapi.map.MapStatusUpdate; 10 import com.baidu.mapapi.map.MapStatusUpdateFactory; 11 import com.baidu.mapapi.map.MapView; 12 import com.baidu.mapapi.map.MyLocationConfiguration; 13 import com.baidu.mapapi.map.MyLocationData; 14 import com.baidu.mapapi.model.LatLng; 15 import com.example.map.R; 16  17 import android.location.Location; 18 import android.os.Bundle; 19 import android.app.Activity; 20 import android.content.Context; 21 import android.graphics.Bitmap; 22 import android.view.Menu; 23 import android.view.MenuItem; 24 import android.view.Window; 25 import android.widget.Toast; 26  27 public class MainActivity extends Activity { 28      29     private MapView mMapView = null; 30     private BaiduMap mBaiduMap; 31     //简化代码            用于this.context=this; 32     private Context context; 33     //定位相关 34     private LocationClient mLocationClient; 35     private MyLocationListener mLocationListener; 36     //是否第一次定位的标志 37     private boolean isFirstIn = true; 38     //定位经纬度 39     private double mLatitude; 40     private double mLongtitude; 41      42     @Override 43     protected void onCreate(Bundle savedInstanceState) { 44         super.onCreate(savedInstanceState); 45       //在使用SDK各组件之前初始化context信息,传入ApplicationContext   46         //注意该方法要再setContentView方法之前实现   47         SDKInitializer.initialize(getApplicationContext());   48          49         requestWindowFeature(Window.FEATURE_NO_TITLE); 50         setContentView(R.layout.activity_main); 51         this.context = this; 52         initView(); 53         //初始化定位 54         initLocation(); 55          56     } 57      58     private void initView() { 59         // TODO Auto-generated method stub 60         mMapView = (MapView) findViewById(R.id.bmapView); 61         mBaiduMap = mMapView.getMap(); 62         //设置打开时的显示比列  这里显示500m左右 63         MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);  64         mBaiduMap.setMapStatus(msu); 65         } 66     private void initLocation() { 67         // TODO Auto-generated method stub 68         mLocationClient = new LocationClient(this); 69         mLocationListener = new MyLocationListener(); 70         mLocationClient.registerLocationListener(mLocationListener); 71         LocationClientOption option = new LocationClientOption(); 72         option.setCoorType("bd09ll"); 73         option.setIsNeedAddress(true); 74         option.setOpenGps(true); 75         option.setScanSpan(1000); 76          77         mLocationClient.setLocOption(option); 78     } 79     //activity销毁时百度地图也销毁 80     @Override   81     protected void onDestroy() {    82         super.onDestroy();   83         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理   84         mMapView.onDestroy();   85     }   86     @Override 87     protected void onStart() { 88         // TODO Auto-generated method stub 89         super.onStart(); 90         // 开启定位 91         mBaiduMap.setMyLocationEnabled(true); 92         if (!mLocationClient.isStarted()) 93             mLocationClient.start(); 94              95     } 96     @Override 97     protected void onStop() { 98         // TODO Auto-generated method stub 99         super.onStop();100         // 停止定位101         mBaiduMap.setMyLocationEnabled(false);102         mLocationClient.stop();103     }104     @Override  105     protected void onResume() {  106         super.onResume();  107         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  108         mMapView.onResume();  109         }  110     @Override  111     protected void onPause() {  112         super.onPause();  113         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  114         mMapView.onPause();  115         }  116     @Override117     public boolean onCreateOptionsMenu(Menu menu) {118         // TODO Auto-generated method stub119         120         getMenuInflater().inflate(R.menu.main, menu);121         return true;122     }123     //菜单按钮的响应事件124     @Override125     public boolean onOptionsItemSelected(MenuItem item) {126         // TODO Auto-generated method stub127         switch (item.getItemId()) {128         case R.id.id_map_common:129             mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);130             break;131         case R.id.id_map_site:132             mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);133             break;134         case R.id.id_map_traffic:135             if(mBaiduMap.isTrafficEnabled())136             {137                 mBaiduMap.setTrafficEnabled(false);138                 item.setTitle("实时交通(off)");139             }140             else141             {142                 mBaiduMap.setTrafficEnabled(true);143                 item.setTitle("实时交通(on)");144             }145             break;146         case R.id.id_map_location:147             //定位最新自己的位置148             centerToMyLocation();149             break;150 151         default:152             break;153         }154         return super.onOptionsItemSelected(item);155     }156     //进到自己的位置157     private void centerToMyLocation() {158         LatLng latLng = new LatLng(mLatitude,mLongtitude);159         160         MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);161         mBaiduMap.animateMapStatus(msu);162     }163     private class MyLocationListener implements BDLocationListener{164 165         @Override166         public void onReceiveLocation(BDLocation location) {167             // TODO Auto-generated method stub168             MyLocationData data = new MyLocationData.Builder()//169             .accuracy(location.getRadius())//170             .latitude(location.getLatitude())//171             .longitude(location.getLongitude())//172             .build();173     mBaiduMap.setMyLocationData(data);174     //获取最新经纬度175     mLatitude = location.getLatitude();176     mLongtitude = location.getLongitude();177     //判断是否第一次定位178     if (isFirstIn)179     {180         //设置经纬度181         LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());182         183         MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);184         mBaiduMap.animateMapStatus(msu);185         //将是否第一次定位的标志 变为不是第一次定位186         isFirstIn = false;187         //显示当前定位的位置188         Toast.makeText(context, location.getAddrStr(),189                 Toast.LENGTH_SHORT).show();190     }191 192         }193         194     }195 }
MainActivity.java

 

菜单对应的文件

位置位于:res-menu-main.xml

1 
2 3
8
13
18
23 24
main.xml

 

要注意的是 在AndroidManifest.xml文件中 需要加入几段代码

1 
5
6
7
8
9

具体位置:

1 
6
9
12
13
14 15
16
17 18
22
23
24
25
26 27 28
需要另外加入代码的放置位置

效果图:

 显示进入activity后定位到自己当前位置的效果

  菜单项中“定位我的位置” 点击后 地图调至手机当前坐标位置

 

转载地址:http://hugol.baihongyu.com/

你可能感兴趣的文章
T-SQL:毕业生出门需知系列(五)
查看>>
教程-Delphi操作快捷键
查看>>
网站服务架构(转)
查看>>
JDBC加载过程
查看>>
【转】如何过滤 adb logcat 输出
查看>>
9260与SAM-BA连接(转)
查看>>
ffmpeg+ffserver搭建流媒体服务器
查看>>
深入理解JVM内幕[转]
查看>>
pytimechart使用
查看>>
蓝桥杯——分而治之的子集数
查看>>
hdu 5430 Reflect (数学推导题)
查看>>
Cortex-M4 Core Registers
查看>>
Android SDK Manager 更新代理配置
查看>>
Scala 深入浅出实战经典 第79讲:单例深入讲解及单例背后的链式表达式
查看>>
Reveal UI 分析工具分析手机 App
查看>>
扩展Bootstrap Tooltip插件使其可交互
查看>>
iOS多用连接、反向协议、安全
查看>>
Swift - 滚动视图(UIScrollView)的用法
查看>>
Altium Designer 出现错误提示(警告)adding items to hidden net GND/VCC
查看>>
poj 3270(置换 循环)
查看>>