Android-百度地图-定位功能
2016-03-09 21:38
483 查看
在上一篇android-百度地图-手机显示地图的基础上,实现定位功能;
这里先说明一下几个比较重要的类:
LocationClient :定位服务的客户端。宿主程序在客户端声明此类,是实现百度SDK,Android定位的核心类.
LocationClientOption:该类用来设置定位SDK的定位方式。配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
BDLocationListener:定位请求回调接口监听事件,在函数中需要重写的
BDLocation:回调的百度坐标类,内部封装了如经纬度、半径等属性信息
思路:1、定义并声明一个LocationClient类的对象MyLocationClient,并在OnStart()、OnStop()和OnDestory()中调用类的开启、停止和销毁的方法(避免关闭之后仍在定位);
2、写一个MyBDLocationListener类继承BDLocationListene接口,并重写其中的方法;
3、对象MyLocationClient注册定位监听;
4、使用类LocationClientOption来设置对象MyLocationClient的定位方式,并绑定。
注意事项:必须在AndroidManifest.xml中声明一个service(在百度定位提供的Demo中,一般都能找到)
好了,话不多说上代码:
这里先说明一下几个比较重要的类:
LocationClient :定位服务的客户端。宿主程序在客户端声明此类,是实现百度SDK,Android定位的核心类.
LocationClientOption:该类用来设置定位SDK的定位方式。配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
BDLocationListener:定位请求回调接口监听事件,在函数中需要重写的
BDLocation:回调的百度坐标类,内部封装了如经纬度、半径等属性信息
思路:1、定义并声明一个LocationClient类的对象MyLocationClient,并在OnStart()、OnStop()和OnDestory()中调用类的开启、停止和销毁的方法(避免关闭之后仍在定位);
2、写一个MyBDLocationListener类继承BDLocationListene接口,并重写其中的方法;
3、对象MyLocationClient注册定位监听;
4、使用类LocationClientOption来设置对象MyLocationClient的定位方式,并绑定。
注意事项:必须在AndroidManifest.xml中声明一个service(在百度定位提供的Demo中,一般都能找到)
<service android:name="com.baidu.location.f" android:process=":remote" android:enabled="true"> <intent-filter> <action android:name="com.baidu.location.service_v2.2"> </action> </intent-filter> </service>
好了,话不多说上代码:
package com.hpu.hanyu_baidumap; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.TextureMapView; import com.baidu.mapapi.model.LatLng; public class MainActivity extends Activity { private TextureMapView mMapView = null; //定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动,是实现百度SDK,Android定位的核心类 private LocationClient mLocationClient; private MyLocationListener myLocationListener; private boolean isFirstIn = true; //定义 BaiduMap 地图对象的操作方法与接口 private BaiduMap mBaiduMap; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); InitView(); InitLocation(); } private void InitView() { // TODO Auto-generated method stub mMapView = (TextureMapView) findViewById(R.id.id_bmapView); mBaiduMap = mMapView.getMap(); MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);//设置地图的缩放比例 mBaiduMap.setMapStatus(msu); this.context = this; } private void InitLocation() { // TODO Auto-generated method stub mLocationClient = new LocationClient(this); myLocationListener = new MyLocationListener(); //注册定位监听 mLocationClient.registerLocationListener(myLocationListener); //该类用来设置定位SDK的定位方式。配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等 LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true);//设置能得到地理位置 option.setOpenGps(true); option.setScanSpan(1000); //绑定定位方式 mLocationClient.setLocOption(option); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.id_map_common: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; case R.id.id_map_site: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; case R.id.id_map_traffic: if(mBaiduMap.isTrafficEnabled()){ mBaiduMap.setTrafficEnabled(false); item.setTitle("实时交通(off)"); }else{ mBaiduMap.setTrafficEnabled(true); item.setTitle("实时交通(on)"); } break; default: break; } return super.onOptionsItemSelected(item); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); //开启定位 mBaiduMap.setMyLocationEnabled(true); if(!mLocationClient.isStarted()){ mLocationClient.start(); } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); mMapView.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); mMapView.onDestroy(); } //重写定位请求回调接口监听事件 class MyLocationListener implements BDLocationListener { //BDLocation,回调的百度坐标类,内部封装了如经纬度、半径等属性信息 @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub //定位数据建造器 MyLocationData data = new MyLocationData.Builder()// .accuracy(location.getRadius()) .latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(data); //MyLocationConfiguration config = new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL, arg1, arg2); //第一次地图定位在所处位置 if(isFirstIn){ //地理坐标基本数据结构 LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());//经度和纬度 //MapStatusUpdateFactory,生成地图状态将要发生的变化 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show();//显示出自己的当前位置 isFirstIn = false; } } } }如图
相关文章推荐
- 如何在android studio中实现自定义view
- android MediaPlayer理解_我的第一篇博客
- Android Studio 下使用自定义属性注意点
- Android -- Looper.prepare()和Looper.loop() —深入版
- Android内存分析
- Android新手入门2016(5)--HelloWorld工程结构分析
- Android--持久化技术
- Android--广播机制
- Android动画--Activity过渡动画 Transition
- Android--Fragment
- Android中Intent的各种常见作用
- 关于android studio中添加新的moudle实现自定义view无法引用的问题
- /Users/alamps/AndroidStudioProjects/Demo11ListView
- Android--Activity
- Android--入门
- 基于Android Webview的Hybrid App开发的前端优化
- mac os使用lsusb命令和连接未知的Android设备
- 隐藏式抽屉(SlidingDrawer)
- /Users/alamps/AndroidStudioProjects/Demo10ScrollView
- Android Parcelable和Serializable的区别