BaiduMap初体验(三) 使用百度地图定位功能
来源:互联网 发布:关闭计算机的8080端口 编辑:程序博客网 时间:2024/06/08 21:04
上一篇文章简单介绍了百度地图相关类的知识,让大家对百度地图的相关类有一定的了解,这篇文章带领大家去学习如何使用百度地图定位的功能。
上一篇:BaiduMap初体验(二) 认识百度地图常用类
定位开始
在 BaiduMap初体验(一) 搭建百度地图的环境介绍了百度地图的详细配置,这里可以跳过。
定位功能实现大概分为4个步骤
1.添加使用相关权限。
<!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
2.注册百度地图定位的服务。
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service>
3.构建地图定位的客户端
public class LocationApplication extends Application { public LocationClient mLocationClient; public MyLocationListener mMyLocationListener; public Vibrator mVibrator; public OnGetDBLocation mOnGetDBLocation; @Override public void onCreate() { super.onCreate(); mLocationClient = new LocationClient(this.getApplicationContext()); mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); mVibrator =(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE); } /** * 实现实时位置回调监听 */ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { //Receive Location MyLocation pMyLocation = new MyLocation(); StringBuilder sb = new StringBuilder(256); pMyLocation.setTime(location.getTime()); pMyLocation.setErrorcode(location.getLocType()); pMyLocation.setLatitude(location.getLatitude()); pMyLocation.setLontitude(location.getLongitude()); pMyLocation.setRadius(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果 sb.append("\nspeed : "); sb.append(location.getSpeed());// 单位:公里每小时 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\nheight : "); sb.append(location.getAltitude());// 单位:米 sb.append("\ndirection : "); sb.append(location.getDirection()); sb.append("\naddr : "); sb.append(location.getAddrStr()); sb.append("\ndescribe : "); sb.append("gps定位成功"); Log.d("skyfin", "gps定位成功"); Log.d("skyfin",sb.toString()); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果 pMyLocation.setAddr(location.getAddrStr()); pMyLocation.setDescribe("网络定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 pMyLocation.setAddr(location.getAddrStr()); pMyLocation.setDescribe("离线定位成功,离线定位结果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { pMyLocation.setAddr(location.getAddrStr()); pMyLocation.setDescribe("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { pMyLocation.setAddr(location.getAddrStr()); pMyLocation.setDescribe("网络不同导致定位失败,请检查网络是否通畅"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { pMyLocation.setAddr(location.getAddrStr()); pMyLocation.setDescribe("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机"); } pMyLocation.setLocationdescribe(location.getLocationDescribe());// 位置语义化信息 // POI信息 if (location.getPoiList().size()!=0) { pMyLocation.setList(location.getPoiList()); } mOnGetDBLocation.get(pMyLocation); } } public static interface OnGetDBLocation{ void get(MyLocation location); } public void setDBLocationListener(OnGetDBLocation dbLocationListener){ this.mOnGetDBLocation = dbLocationListener; }}
4.添加定位的application
<application android:name=".app.LocationApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
5.配置定位信息
private LocationClientOption initLocationClientOption() { LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系, option.setScanSpan(0);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需 地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setPriority(LocationClientOption.GpsOnly); option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.setEnableSimulateGps(true);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 return option; }
6.最后显示在地图上
public class LocationActivity extends AppCompatActivity { private LocationClient mLocationClient; LocationClientOption mLocationClientOption = null; private Button mStartLocationBtn; private MapView mMapView = null; private MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.COMPASS; //百度地图层实体 BaiduMap mBaiduMap = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); mLocationClient = ((LocationApplication) getApplication()).mLocationClient; mLocationClientOption = initLocationClientOption(); mLocationClient.setLocOption(mLocationClientOption); mStartLocationBtn = (Button) findViewById(R.id.start_btn); mStartLocationBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mStartLocationBtn.getText().toString().equals("开始定位")){ mLocationClient.start(); ((LocationApplication)getApplication()).setDBLocationListener(new LocationApplication.OnGetDBLocation() { @Override public void get(MyLocation location) { mBaiduMap.setMyLocationEnabled(true); MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标) //mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked); MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, null); mBaiduMap.setMyLocationConfigeration(config); } }); mStartLocationBtn.setText("正在定位"); }else{ mLocationClient.stop(); mStartLocationBtn.setText("开始定位"); } } }); } private LocationClientOption initLocationClientOption() { LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系, option.setScanSpan(0);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需 地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setPriority(LocationClientOption.GpsOnly); option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.setEnableSimulateGps(true);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 return option; } @Override public void onDestroy() { super.onDestroy(); //在Fragment执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override public void onResume() { super.onResume(); //在Fragment执行onResume时执行mMapView.onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override public void onPause() { super.onPause(); //在Fragment执行onPause时执行mMapView.onPause (),实现地图生命周期管理 mMapView.onPause(); }}
截图
dome下载地址:https://github.com/locojyw/BaiduMapAPI.git
0 0
- BaiduMap初体验(三) 使用百度地图定位功能
- BaiduMap初体验(四) 使用百度地图的基本功能
- 百度地图(BaiduMap)定位工具类封装和使用
- BaiduMap初体验(五) 使用百度地图的POI和云检索
- BaiduMap初体验(一) 搭建百度地图的环境
- BaiduMap初体验(二) 认识百度地图常用类
- BaiduMap百度地图使用攻略
- 百度地图 baiduMap(二) 定位
- 百度地图 baiduMap(三) 移动轨迹
- 使用百度地图api实现定位功能。
- 使用百度地图sdk实现定位功能
- 百度地图定位功能的使用
- 百度地图-定位功能
- 百度地图定位功能
- 百度地图定位功能
- 百度地图 定位功能
- 百度地图定位功能
- BaiduMap---百度地图官方Demo之离线地图功能(介绍如何下载和使用离线地图)
- Android Fragment应用实战
- 第八周--项目五--计数的模式匹配
- 第八周项目一—建立顺序串的算法库
- Android 仿微信回复评论点赞效果
- 第七周 项目四 队列数组
- BaiduMap初体验(三) 使用百度地图定位功能
- What’s New in MySQL 5.7? (Generally Available)
- LU分解不分块的C程序
- lCS——最长公共子序列
- 作業系統之前的程式 for stm32f4 - discovery (1) - 1 加到 10 , asm version
- 计算机图形学基础实验二(DDA算法实现 稍加控制)
- Ubuntu分区/boot容量不足
- configure: error: C compiler cannot create executables编译错误的解决办法的思路分析
- 美国媒体英语新闻