首页 > 代码库 > 百度地图(SDK v3.1.1)和百度定位(SDKv4.2)的实现!
百度地图(SDK v3.1.1)和百度定位(SDKv4.2)的实现!
</pre>需要使用百度地图的服务,你必须先创建一个百度开发者账号。每个账号就可以创建20个可以使用服务的应用。<p></p><p><span style="color:rgb(98,98,98); font-family:微软雅黑,Helvetica,Arial,sans-serif; line-height:20px">armeabi文件夹。</span>首先当然是导入库文件,在项目中建立libs文件夹,在libs文件夹下面建立</p><p><span style="color:rgb(98,98,98); font-family:微软雅黑,Helvetica,Arial,sans-serif; line-height:20px"><span style="color:rgb(98,98,98); font-family:微软雅黑,Helvetica,Arial,sans-serif; line-height:20px">将locSDK4.2.jar文件拷贝到工程的libs目录下,<span style="color:rgb(98,98,98); font-family:微软雅黑,Helvetica,Arial,sans-serif; line-height:20px">liblocSDK4d.so文件拷贝到libs/armeabi目录下。</span></span></span></p><p>每个应用需要一个密钥才能调用百度的服务,密钥的申请需要安全码。</p><p>安全码是由数字签名+ ; + 包名组成。 数字签名可以点击windows->preference->android->build查看。包名可以直接查看android程勋的 manifest文件的根目录的package:属性。</p><p>获的服务密钥之后放入application节点中:</p><p></p><pre code_snippet_id="492618" snippet_file_name="blog_20141022_2_6633639" name="code" class="html"><meta-data <span style="white-space:pre"> </span>android:name="com.baidu.lbsapi.API_KEY" android:value=http://www.mamicode.com/"你所获取的密钥" />声明service组件:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
声明所需要的权限:
<!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!—SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> <!--允许应用读取低级别的系统日志文件 --> <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
通过这些配置之后就可以编写定位代码了。
LocationClient定位功能主要的实现类是LocationClient类,调用LocationClient.start()方法, 开始定位,调用LocationClient.stop()方法结束定位。
当然没这么简单,还需要几个辅助类对LocationClient进行配置。
mLocationClient = ((LocationApplication)getApplication()).mLocationClient;
LocationMode tempMode = LocationMode.Hight_Accuracy; //定位模式精度 String tempcoor="gcj02"; //返回坐标类型
LocationClientOption option = new LocationClientOption(); //定位功能主要的配置类 option.setLocationMode(tempMode);<span style="white-space:pre"> </span>//设置定位模式 option.setCoorType(tempcoor);<span style="white-space:pre"> </span>//设置坐标返回类型 option.setScanSpan(1000);<span style="white-space:pre"> </span>//定位的间隔时间 option.setIsNeedAddress(true);<span style="white-space:pre"> </span>//返回结果是否包含地址信息 mLocationClient.setLocOption(option);<span style="white-space:pre"> </span>//把<span style="font-family: Arial, Helvetica, sans-serif;">LocationClientOption 放入LocationClient中</span>
或许已经发现LocationClient实例mLocationClient并不是通过新建获取的。
这是因为新建了LocationApplication类,此类继承了Application便于管理应用级别的变量。
获取LocationApplication中变量的方法((LocationApplication)getApplication());
使用前必须在manifest中添加相应的声明。
<application android:name="com.example.unicom.LocationApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
LocationApplication中新建LocationClient以及实现返回数据的监听(只要开始定位了,每隔设置的一段时间就会回调MyLocationListener,location为返回的数据类)。
mLocationClient = new LocationClient(this.getApplicationContext()); mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { String longiAndLati = ""+location.getLongitude() +"," + location.getLatitude(); //经纬度 String address = location.getAddrStr(); //地址 Log.i("mapTest", "经纬度:" + longiAndLati + "\n地址:" + address); LocationTask loginTask = new LocationTask(); } }
地图功能的实现:
建立百度map组件:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />使用SDKInitializer.initialize(getApplicationContext());初始化地图的组件。必须的,而且要在setContentView前面调用。(其实调用到这里就已经可以显示百度地图了)
但我这个项目需要根据经纬度显示位置,所以还有以下的操作。
初始化:
//地图初始化 mMapView = (MapView)findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); //搜索模块 mSearch = GeoCoder.newInstance(); mSearch.setOnGetGeoCodeResultListener(this); //设置监听事件
根据经纬度查询地址:
//先放纬度再放经度 LatLng ptCenter = new LatLng((Float.valueOf(LocaY)), (Float.valueOf(LocaX))); //使用经纬度初始化LaLng对象 // 反Geo搜索 mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));<span style="white-space:pre"> </span>//开始搜索
实现的回调方法:
<span style="white-space:pre"> </span>@Override public void onGetGeoCodeResult(GeoCodeResult arg0) { // TODO Auto-generated method stub } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(EquipQueryActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show(); return; } mBaiduMap.clear(); mBaiduMap.addOverlay(new MarkerOptions().position(result.getLocation()).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka)); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(resultgetLocation())); Toast.makeText(EquipQueryActivity.this, result.getAddress(),Toast.LENGTH_LONG).show(); }
百度地图(SDK v3.1.1)和百度定位(SDKv4.2)的实现!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。