Android集成百度定位以及导航详解
来源:互联网 发布:淘宝买家退款率计算 编辑:程序博客网 时间:2024/05/22 00:27
Android集成百度定位以及导航详解
百度地图Android SDK 官方下载地址:
包括类参考、示例代码、开发包(基础地图、检索功能、LBS云检索和计算工具)
申请密钥教程:点击打开
1.无GUI定位:
步骤0:清单中 添加需要的权限、Application中添加 百度定位服务以及 需要配置的 key 添加lib文件
下载demo后将demo清单文件中权限 、 lib下的文件 拷贝即可
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" />
此服务为百度定位的定位服务,定位都要靠这个服务,必须得加。
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的密钥" />
这一步也不可缺少。
↓看下一步
步骤1:初始化SDK
初始化SDK 一般放在应用的Application的子类中。也可以放在单独的Activity或Fragment中,不过换了 页面要重新初始化SDK(建议放在Application)
Location.initLocation(getBaseContext());
就一行代码初始化了SDK。
↓看下一步
步骤2:实例化定位类
步骤3:设置定位参数
步骤4:设置定位回调(成功后回调接口)
步骤5:开启定位以及关闭定位(时机)
( 以上4个步骤一般都是封装在一个方法里,除了定位回调) LocationClient就是定位需要的类 初始化:
LocationClient mLocationClient = new LocationClient(上下文);
LocationClientOption 是定位参数需要的类,一般设置都有如下:
LocationClientOption option = new LocationClientOption(); //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可选,默认gcj02,设置返回的定位结果坐标系 option.setCoorType("bd09ll"); int span = 0; //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才有效的 option.setScanSpan(span); option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation. getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiLi st里得到 option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是 否在stop的时候杀死这个进程,默认不杀死 option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置高精度定位定位模式 mLocationClient.setLocOption(option);
( 一般设置只需要设置一次就可以了,必要时可以用if判断来让设置有且执行一次,除了需要动态修改参数)
mLocationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { //事情做完了关闭定位mLocationClient.stop();} }); mLocationClient.start();定位需要的类设置监听事件 回调成功定位后各种参数 封装在BDLocation中,可以通过BDLocation对象获 取地理各种参数 比如经纬度 当前地址 当前城市 国家 国家号码等等,具体参考文档。
这样无GUI的定位就结束了。
2.GUI定位和导航
步骤0:参考无GUI定位的步骤0.
步骤1:初始化SDK
Location.initLocation(getBaseContext()); ←无GUI的定位SDK
SDKInitializer.initialize(getApplicationContext()); ←GUI的定位SDK(设计到控件以及各组建交互需要)
SDKInitializer.initialize(getApplicationContext()); ←GUI的定位SDK(设计到控件以及各组建交互需要)
步骤2:显示地图控件,开启定位图层以及导航(GUI定位涉及很多内容介绍GUI定位以及添加覆盖物绘制路 线)
1. 初始化地图控件:(MapView为地图控件)
mMapView = (MapView) findViewById(R.id.map); mBaiduMap = mMapView.getMap(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true);{
这边有一点要强调,因为百度地图是一直绘制,占用挺多内存,所以在生命周期里管理控件
@Override protected void onPause() { super.onPause(); // activity 暂停时同时暂停地图控件 mMapView.onPause(); } @Override protected void onResume() { super.onResume(); // activity 恢复时同时恢复地图控件 mMapView.onResume(); } @Override protected void onDestroy() { super.onDestroy(); // activity 销毁时同时销毁地图控件 mMapView.onDestroy(); if (mSearch != null) { mSearch.destroy(); } }
}
2.通过无GUI的定位方式在回调接口里获取经纬度
mLocationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { latitude = location.getLatitude(); // 获取精度纬度 longitude = location.getLongitude(); LatLng ll = new LatLng(latitude, longitude); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));//地图移动到当前经纬 度 、 //事情做完了关闭定位 mLocationClient.stop(); } }); mLocationClient.start();
最后baiduMap 调用animateMapStatus 进行移动到设置的经纬度位置
3.添加覆盖物以及设置两个经纬度之间的连线,根据地址编码经纬度:
一般搜索两个位置 通过当前位置即回调中的经纬度,另一方通过输入地址来获取经纬度,最后通过两个 经纬度来处理一些操作,并对两个经纬标记(添加覆盖物()添加标记)!
//通过地址获取经纬度public void checkAddPosition( ) { if(mSearch==null) { mSearch = GeoCoder.newInstance(); mSearch.setOnGetGeoCodeResultListener(listener); } mSearch.geocode(new GeoCodeOption() .city("XX") .address("xx村")); }
上述代码介绍使用 private GeoCoder mSearch; 的对象来反编码。最后会通过一个回调函数来接收经纬度
//计算地理的 编码与反编码 OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() { public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { //没有检索到结果 PromptManager.showToast(BDNavigationActivity.this,"当前城市无法进行定位!"); } else { //获取地理编码结果 LatLng location = result.getLocation(); double latitude1 = location.latitude; double longitude1 = location.longitude; getLine(latitude, longitude, latitude1, longitude1); Log.i("TAG", "latitude1:" + latitude1 + " longitude1" + longitude1); } } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { //没有找到检索结果 } //获取反向地理编码结果 } };
上获取了两个经纬度后 就可以对两个电进行操作比如果 对两个电添加覆盖物以及连线,博主封装了一个方法来设置两个经纬度之间的联系以及添加覆盖物。覆盖物可以换图片以及其他控件
public void getLine(double latitude,double longitude,double latitude1,double longitude1) { //------------添加覆盖物--d-------- BitmapDescriptor bdA = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); BitmapDescriptor bdB = BitmapDescriptorFactory .fromResource(R.drawable.icon_markb); LatLng llA = new LatLng(latitude, longitude); LatLng llB = new LatLng(latitude1, longitude1); MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA) .zIndex(9).draggable(true); Marker mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA)); MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdB) .zIndex(5); Marker mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB)); //--------------------处理连线------------------ Log.i("TAG", "latitude="+latitude+" longitude"+longitude); List<LatLng> points = new ArrayList<LatLng>(); points.add(llA); points.add(llB); OverlayOptions ooPolyline = new PolylineOptions().width(5) .color(0xAAFF0000).points(points); mBaiduMap.addOverlay(ooPolyline); //---------------- }
仔细阅读代码,收获更多!
1 0
- Android集成百度定位以及导航详解
- Android应用集成百度定位及导航
- android百度定位导航
- android集成百度定位
- android Gps 定位 百度地图集成方法详解-----编码
- Android studio中集成百度地图+百度定位+导航SDK冲突导致部分手机出现“百度导航引擎初始化失败”解决方案
- Android 百度地图API 定位 导航 代码
- Android 百度地图API 定位 导航
- android 百度地图集成之 导航
- android集成百度地图定位、poi检索、marker标记功能,以及marker点击事件
- Xamarin Android 集成百度定位SDK
- Android调用百度地图app , 实现百度定位、导航
- 百度导航,定位冲突
- 百度地图集成以及使用(一)定位
- 百度定位集成
- android 百度地图api 定位以及overlay
- android 百度API定位以及获取天气
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
- 游戏交互杂谈——算是专栏的开始
- 字符串题目-strstr()
- 【步兵 c++】组件模式--基础篇
- 实习第五天
- 【51nod】1006 最长公共子序列Lcs
- Android集成百度定位以及导航详解
- 独立游戏开发如何入门?
- UISearchController使用方法及注意事项
- STM32寄存器开发系列(1)启动代码设计
- (1)spring boot起步之Hello World【从零开始学Spring Boot】
- Dijkstra算法--一个点到其余点最短路径
- 网络编程TCP/UDP
- Thinkpad T400安装CentOS 7后无wifi的解决方法
- POJ 2492 A Bug's Life