android百度地图android 加载离线地图图可以多个开发app共用吗

&&&&android百度地图地图移动选址并把周边信息用列表显示
android百度地图地图移动选址并把周边信息用列表显示
根据某一位置获取该位置周边所有信息,并将信息以列表的形式显示出来,移动地图可以重新选取坐标,并相应的更新列表。记得把key换成自己的
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行Android 通过百度地图SDK 实现地图显示和定位(一)
Android 通过百度地图SDK 实现地图显示和定位(一)
android 学习随笔
请点击链接查看完整的
Android 通过百度地图SDK 实现地图显示和定位(一)。
访问百度地图API 网站,查看流程。
/index.php?title=androidsdk
获取密匙(AK)
要使用百度地图的sdk 首先先申请自己的应用的密匙(Ak)
填写相关的信息。
SHA1的获取(两种方法)
解释:SHA1安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital
Signature Standard DSS)里面定义的数字签名算法(DigitalSignature Algorithm DSA)。
&&&&&&&&&&&&&&&&&&&& & Eclipse 的SHA1 获取方法(两种)
通过打包签名的方式进行获取
【1】右键项目-&report(输出)
注意这个 project 不能是中文
你可以创建新的存放签名的路径,获取选择原来创建过的路径。(上图是使用已经创建过的路径)
************************************
先演示创建新的路径方式
Location 自己设定存放的路径,记得起个名
Password 密码
Confirm 重复密码
填写你自己的信息
写好的你的密码,其它参数参照网上看下。
下来点 Finish 就行了
注意这个只是 创建一个路径,没有将应用打包签名
使用旧路径来实现应用的打包签名
重要的时候来了
两种加密方式
MD5& 和SHA1
所以我们就拿到了SHA1 的值。点击Finish 就打包签名成功。
SHA1:00:1A:65:CC:EC:EE:A4:84:C6:AA:6F:C4:4D:AD:76:A1:25:2F:73:03
使用 adt 22 以上版本,可以在 eclipse 中直接查看SHA1。
Windows:依次在 eclipse 中打开 Window -& Preferances -& Android-& Build。
Mac:依次在 eclipse 中打开 Eclipse/ADT-&Preferances -& Android-& Build。
在弹出的 Build 对话框中“SHA1fingerprint” 中的值即为 Android 签名证书的 Sha1 值,如下图所示:
SHA1fingerprint E8:92:24:5E:1A:0B:61:25:45:D4:09:A2:23:54:89:A2:36:44:7D:13
这个就是debug
申请创建应用
将我们拿到的&SHA1 的值和我们项目的包名提交。
/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
我们将我们需要的服务都选中
下载开发包& 和 实例代码
创建项目,加载jar包
查看官方的开发指南
/index.php?title=androidsdk/guide/buildproject
Eclipse工程配置方法
第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
第二步:在工程属性-&JavaBuild Path-&Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
<span style="color:#. 在Eclipse
中选中工程,右键选 Properties-&Java BuildPath-&Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -&clean-& clean all .
显示百度地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
&application&&
&&&&&meta-data&
&&&&&&&&android:name=&com.baidu.lbsapi.API_KEY&&
&&&&&&&&android:value=&开发者 key&/&&
&/application&
<span style="color:#)添加所需权限
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE&/&
&uses-permission android:name=&android.permission.INTERNET&/&
&uses-permission android:name=&com.android.launcher.permission.READ_SETTINGS&/&
&uses-permission android:name=&android.permission.WAKE_LOCK&/&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE&/&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE&/&
&uses-permission android:name=&android.permission.GET_TASKS&/&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
&uses-permission android:name=&android.permission.WRITE_SETTINGS&/&
第三步,在布局xml文件中添加地图控件;
&com.baidu.mapapi.map.MapView&
&&&&android:id=&@&#43;id/bmapView&&
&&&&android:layout_width=&fill_parent&&
&&&&android:layout_height=&fill_parent&&
&&&&android:clickable=&true&/&
第四步,在应用程序创建时初始化SDK引用的Context 全局变量:
publicclass MainActivity extends Activity {&
&&&&@Override&
&&&&protectedvoid onCreate(Bundle savedInstanceState){&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
publicclass MainActivity extends Activity {&
&&&&MapView mMapView =null;&
&&&&@Override&
&&&&protectedvoid onCreate(Bundle savedInstanceState){&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
&&&&&&&&//获取地图控件引用&
&&&&&&&&mMapView =(MapView) findViewById(R.id.bmapView);&
&&&&@Override&
&&&&protectedvoid onDestroy(){&
&&&&&&&&super.onDestroy();&
&&&&&&&&//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理&
&&&&&&&&mMapView.onDestroy();&
&&&&@Override&
&&&&protectedvoid onResume(){&
&&&&&&&&super.onResume();&
&&&&&&&&//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理&
&&&&&&&&mMapView.onResume();&
&&&&&&&&}&
&&&&@Override&
&&&&protectedvoid onPause(){&
&&&&&&&&super.onPause();&
&&&&&&&&//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理&
&&&&&&&&mMapView.onPause();&
&&&&&&&&}&
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。
注意:你的jar包需要下都是一个版本的,版本不一样就会出现很多的问题。
***********************************************************明天重新写一个Demo 看看到底怎么写
BaiduMapDemo 实现
日17:19:48
【1】实现百度地图的显示
【2】实现定位功能
实现百度地图的显示
准备下载基础的jar包,并且加载到类库中去。
显示百度地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
&application&&
&&&&&meta-data&
&&&&&&&&android:name=&com.baidu.lbsapi.API_KEY&&
&&&&&&&&android:value=&开发者 key&/&&
&/application&
<span style="color:#)添加所需权限
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE&/&
&uses-permission android:name=&android.permission.INTERNET&/&
&uses-permission android:name=&com.android.launcher.permission.READ_SETTINGS&/&
&uses-permission android:name=&android.permission.WAKE_LOCK&/&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE&/&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE&/&
&uses-permission android:name=&android.permission.GET_TASKS&/&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
&uses-permission android:name=&android.permission.WRITE_SETTINGS&/&
第三步,在布局xml文件中添加地图控件;
&com.baidu.mapapi.map.MapView&
&&&&android:id=&@&#43;id/bmapView&&
&&&&android:layout_width=&fill_parent&&
&&&&android:layout_height=&fill_parent&&
&&&&android:clickable=&true&/&
第四步,在应用程序创建时初始化SDK引用的Context 全局变量:
publicclass MainActivity extends Activity {&
&&&&@Override&
&&&&protectedvoid onCreate(Bundle savedInstanceState){&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
publicclass MainActivity extends Activity {&
&&&&MapView mMapView =null;&
&&&&@Override&
&&&&protectedvoid onCreate(Bundle savedInstanceState){&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
&&&&&&&&//获取地图控件引用&
&&&&&&&&mMapView =(MapView) findViewById(R.id.bmapView);&
&&&&@Override&
&&&&protectedvoid onDestroy(){&
&&&&&&&&super.onDestroy();&
&&&&&&&&//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理&
&&&&&&&&mMapView.onDestroy();&
&&&&@Override&
&&&&protectedvoid onResume(){&
&&&&&&&&super.onResume();&
&&&&&&&&//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理&
&&&&&&&&mMapView.onResume();&
&&&&&&&&}&
&&&&@Override&
&&&&protectedvoid onPause(){&
&&&&&&&&super.onPause();&
&&&&&&&&//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理&
&&&&&&&&mMapView.onPause();&
&&&&&&&&}&
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。
出现的错误
AuthenticationError errorcode: 200 uid: -1 appid -1 msg: APP不存在
解决方法:将你创建的应用删掉,再创建一个,重新获取AK &#20540;。
定位功能与 地图显示 都分开了
功能类的使用
使用综合定位功能
综合定位功能指的是根据用户实际需求,返回用户当前位置的基础定位服务,包含GPS和网络定位(WiFi定位和基站定位)功能。基本定位功能同时还支持位置描述信息功能,离线定位功能,位置提醒功能和位置语义化功能。
第一步,初始化LocationClient类
此处需要注意:LocationClient类必须在主线程中声明,需要Context类型的参数。
Context需要时全进程有效的Context,推荐用getApplicationConext获取全进程有效的Context。
public LocationClient mLocationClient =null;
public BDLocationListener myListener =new MyLocationListener();
publicvoid onCreate(){
&&& mLocationClient =new LocationClient(getApplicationContext());&&&& //声明LocationClient类
&&& mLocationClient.registerLocationListener( myListener );&&& //注册监听函数
LocationClient类是定位SDK的核心类,具体方法详见。
第二步,配置定位SDK参数
设置定位参数包括:定位模式(高精度定位模式、低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、位置语义化信息、POI信息等等。
LocationClientOption类,该类用来设置定位SDK的定位方式,例如:
privatevoid initLocation(){
&&&&&&& LocationClientOption option =new LocationClientOption();
&&&&&&& option.setLocationMode(LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
&&&&&&& option.setCoorType(&bd09ll&);//可选,默认gcj02,设置返回的定位结果坐标系
&&&&&&& int span=1000;
&&&&&&& option.setScanSpan(span);//可选,默认<span style="color:#,即仅定位一次,设置发起定位请求的间隔需要大于等于<span style="color:#00ms才是有效的
&&&&&&& option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
&&&&&&& option.setOpenGps(true);//可选,默认false,设置是否使用gps
&&&&&&& option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照<span style="color:#S/1次频率输出GPS结果
&&&&&&& option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类&#20284;于“在北京天安门附近”
&&&&&&& option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死&
&&&&&&&&option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
&&&&&&& mLocationClient.setLocOption(option);
高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;
低功耗定位模式:这种定位模式下,不会使用GPS进行定位,只会使用网络定位(WiFi定位和基站定位);
仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位。
第三步,实现BDLocationListener接口
BDLocationListener为结果监听接口,异步获取定位结果,实现方式如下:
publicclass MyLocationListener implements BDLocationListener {
&&&&&&& @Override
&&&&&&& publicvoid onReceiveLocation(BDLocation location){
&&&&&&&&&&& //Receive Location
&&&&&&&&&&& StringBuffer sb =newStringBuffer(256);
&&&&&&&&&&& sb.append(&time&: &);
&&&&&&&&&&& sb.append(location.getTime());
&&&&&&&&&&& sb.append(&\nerror code&: &);
&&&&&&&&&&& sb.append(location.getLocType());
&&&&&&&&&&& sb.append(&\nlatitude&: &);
&&&&&&&&&&& sb.append(location.getLatitude());
&&&&&&&&&&& sb.append(&\nlontitude&: &);
&&&&&&&&&&& sb.append(location.getLongitude());
&&&&&&&&&&& sb.append(&\nradius&: &);
&&&&&&&&&&& sb.append(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定位成功&);
&&&&&&&&&&& }elseif(location.getLocType()== BDLocation.TypeNetWorkLocation){// 网络定位结果
&&&&&&&&&&&&&&& sb.append(&\naddr&: &);
&&&&&&&&&&&&&&& sb.append(location.getAddrStr());
&&&&&&&&&&&&&&& //运营商信息
&&&&&&&&&&&&&&& sb.append(&\noperationers&: &);
&&&&&&&&&&&&&&& sb.append(location.getOperators());
&&&&&&&&&&&&&&& sb.append(&\ndescribe&: &);
&&&&&&&&&&&&&&& sb.append(&网络定位成功&);
&&&&&&&&&&& }elseif(location.getLocType()== BDLocation.TypeOffLineLocation){// 离线定位结果
&&&&&&&&&&&&&&& sb.append(&\ndescribe&: &);
&&&&&&&&&&&&&&& sb.append(&离线定位成功,离线定位结果也是有效的&);
&&&&&&&&&&& }elseif(location.getLocType()== BDLocation.TypeServerError){
&&&&&&&&&&&&&&& sb.append(&\ndescribe&: &);
&&&&&&&&&&&&&&& sb.append(&服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-,会有人追查原因&);
&&&&&&&&&&& }elseif(location.getLocType()== BDLocation.TypeNetWorkException){
&&&&&&&&&&&&&&& sb.append(&\ndescribe&: &);
&&&&&&&&&&&&&&& sb.append(&网络不同导致定位失败,请检查网络是否通畅&);
&&&&&&&&&&& }elseif(location.getLocType()== BDLocation.TypeCriteriaException){
&&&&&&&&&&&&&&& sb.append(&\ndescribe&: &);
&&&&&&&&&&&&&&& sb.append(&无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机&);
&&&&&&&&&&& }
sb.append(&\nlocationdescribe&: &);
&&&&&&&&&&&&&&& sb.append(location.getLocationDescribe());// 位置语义化信息
&&&&&&&&&&&&&&& List&Poi& list = location.getPoiList();// POI数据
&&&&&&&&&&&&&&& if(list !=null){
&&&&&&&&&&&&&&&&&&& sb.append(&\npoilist size =&: &);
&&& &&&&&&&&&&&&&&&&sb.append(list.size());
&&&&&&&&&&&&&&&&&&& for(Poi p : list){
&&&&&&&&&&&&&&&&&&&&&&& sb.append(&\npoi=&: &);
&&&&&&&&&&&&&&&&&&&&&&& sb.append(p.getId()&#43;& &&#43; p.getName()&#43;& &&#43; p.getRank());
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&&Log.i(&BaiduLocationApiDem&, sb.toString());
BDLocation类,封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取。通过该类用户可以获取错误码,位置的坐标,精度半径等信息。具体方法请参考。
获取定位返回错误码::
publicint getLocType ()
返回&#20540;:
<span style="color:# : GPS定位结果,GPS定位成功。
<span style="color:# : 无法获取有效定位依据,定位失败,请检查运营商网络或者WiFi网络是否正常开启,尝试重新请求定位。
<span style="color:# : 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。
<span style="color:# : 定位缓存的结果。
<span style="color:# : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。
<span style="color:# : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。
<span style="color:# : 网络连接失败时,查找本地离线定位时对应的返回结果。
<span style="color:#1: 网络定位结果,网络定位成功。
<span style="color:#2: 请求串密文解析失败,一般是由于客户端SO文件加载失败造成,请严&#26684;参照开发指南或demo开发,放入对应SO文件。
<span style="color:#7: 服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。
<span style="color:#2: AK参数错误,请按照说明文档重新申请AK。
<span style="color:#5:AK不存在或者非法,请按照说明文档重新申请AK。
<span style="color:#1: AK服务被开发者自己禁用,请按照说明文档重新申请AK。
<span style="color:#2: key mcode不匹配,您的AK配置过程中安全码设置有问题,请确保:SHA1正确,“;”分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请AK。
<span style="color:#1~700:AK验证失败,请按照说明文档重新申请AK。
如果不能定位,请记住这个返回&#20540;,并到百度LBS开放平台论坛Andriod定位SDK版块中进行交流,网址:&。若返回&#20540;是162~167,请将错误码、IMEI和定位时间反馈至邮箱loc-,以便我们跟进追查问题。
第四步,开始定位
mLocationClient.start();
start:启动定位SDK。 stop:关闭定位SDK。调用start之后只需要等待定位结果自动回调即可。
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop函数即可。
如果stop之后仍然想进行定位,可以再次start等待定位结果回调即可。
如果开发者想按照自己逻辑请求定位,可以在start之后按照自己的逻辑请求locationclient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。
位置提醒使用
位置提醒最多提醒3次,3次过后将不再提醒。 假如需要再次提醒,或者要修改提醒点坐标,都可通过函数SetNotifyLocation()来实现。
//位置提醒相关代码
mNotifyer =new NotifyLister();
mNotifyer.SetNotifyLocation(42.37,113.6,3000,&gps&);//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
mLocationClient.registerNotify(mNotifyer);
//注册位置提醒监听事件后,可以通过SetNotifyLocation 来修改位置提醒设置,修改后立刻生效。
//BDNotifyListner实现
publicclass NotifyLister extends BDNotifyListener{
&&&&&& publicvoid onNotify(BDLocation mlocation, float distance){
&&&&&& &&&mVibrator01.vibrate(1000);//振动提醒已到设定位置附近
//取消位置提醒
mLocationClient.removeNotifyEvent(mNotifyer);
我的热门文章
即使是一小步也想与你分享& android使用百度地图、定位SDK实现地图和定位功能
android使用百度地图、定位SDK实现地图和定位功能
在百度地图看了几个小时的教程,发现种种问题,很大部分是百度对于定位API 网页上的DEMO代码一大堆错误!这极可能是定位SDK升级后而网页上的DEMO部分代码沿用旧版导致的。
在该示例中取了个变量叫mLocationClient,后面居然叫mLocClient,我找了半天,说这变量哪来的呢
这个错误是最致命的,在网页上的DEMO(开发指南)里居然连开始定位这个函数至始至终都没调用过!!!
新手咋看以为调用这个就可以定位了,擦,其实还应该调用mLocClient.start(); 才行,否则压根就没启动定位。。。
二、使用百度地图V2.2和定位V4.0实现地图和定位功能
1、首先将必要的库文件导入到你的项目里,具体参看这里
/map/sdkandev-2.htm
/map/geosdk-android-developv4.0.htm
2、编写代码 (MainActivity.java)
[java][/java] view plaincopy
package com.android.
import android.app.A
import android.os.B
import android.os.H
import android.util.L
import android.view.M
import android.view.MenuI
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
import com.baidu.mapapi.BMapM
import com.baidu.mapapi.map.LocationD
import com.baidu.mapapi.map.MapC
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.map.MyLocationO
import com.api.basestruct.GeoP
public class MainActivity extends Activity {
private static final String BD_KEY="请在这里输入你的百度地图Key,这里我删除了我自己的,你自己填";
//地图管理器
private BMapManager mBMapMan=
//地图视图
private MapView mMapView=
private LocationClient mLocationClient=
//我的位置覆盖物
private MyLocationOverlay myO
//位置在图层中的索引
private int myOverlayIndex=0;
//是否定位到我的位置
private boolean bmyLocal=
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBMapMan=new BMapManager(getApplication());
mBMapMan.init(BD_KEY, null);
setContentView(R.layout.activity_main);
//注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.activity_main);
mMapView=(MapView)findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true);
//设置启用内置的缩放控件
MapController mMapController=mMapView.getController();
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point);//设置地图中心点
mMapController.setZoom(12);//设置地图zoom级别
////////////////////////定位功能代码开始
mLocationClient=new LocationClient(this);
mLocationClient.setAK(BD_KEY);
myOverlay=new MyLocationOverlay(mMapView);
LocationClientOption option=new LocationClientOption();
option.setOpenGps(true);
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
//当不设此项,或者所设的整数值小于1000(ms)时,采用一次定位模式。
//option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息
mLocationClient.setLocOption(option);
//注册位置监听
mLocationClient.registerLocationListener(locationListener);
if(mLocationClient!=null&&!mLocationClient.isStarted())
mLocationClient.requestLocation();
mLocationClient.start();
Log.e("LocSDK3", "locClient is null or not started");
private BDLocationListener locationListener=new BDLocationListener()
public void onReceiveLocation(BDLocation arg0) {
Dispose(arg0);
public void onReceivePoi(BDLocation arg0) {
Dispose(arg0);
private void Dispose(BDLocation location)
if(location==null)
StringBuffer sb = new StringBuffer(256);
sb.append("time : ");
sb.append(location.getTime());
sb.append("\nerror code : ");
sb.append(location.getLocType());
sb.append("\nlatitude : ");
sb.append(location.getLatitude());
sb.append("\nlontitude : ");
sb.append(location.getLongitude());
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){
sb.append("\nspeed : ");
sb.append(location.getSpeed());
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\naddr : ");
sb.append(location.getAddrStr());
//poiLocation
if(location.hasPoi()){
sb.append("\nPoi:");
sb.append(location.getPoi());
sb.append("\nnoPoi information");
//需要定位到我的位置?
if(bmyLocal)
double lat=location.getLatitude();
double lon=location.getLongitude();
LocationData data=new LocationData();
data.latitude=
data.longitude=
data.direction=2.0f;
myOverlay.setData(data);
//检查覆盖物是否存在,存在则修改,否则则添加
if(mMapView.getOverlays().contains(myOverlay))
mMapView.getOverlays().set(myOverlayIndex,myOverlay);
myOverlayIndex=mMapView.getOverlays().size();
mMapView.getOverlays().add(myOverlay);
GeoPoint geoPoint=new GeoPoint((int)(lat* 1E6),(int)(lon* 1E6));
mMapView.getController().setCenter(geoPoint);
mMapView.refresh();
Log.e("定位结果:",sb.toString());
//创建菜单
public boolean onCreateOptionsMenu(Menu menu)
//组、ID、排序、菜单名
menu.add(0,1,1,"我的位置").setIcon(R.drawable.root_icon);
//处理菜单
public boolean onOptionsItemSelected(MenuItem item)
switch(item.getItemId())
//我的位置
mLocationClient.requestLocation();
mLocationClient.start();
protected void onDestroy(){
if(mLocationClient!=null&&mLocationClient.isStarted())
mLocationClient.stop();
mMapView.destroy();
if(mBMapMan!=null){
mBMapMan.destroy();
super.onDestroy();
protected void onPause(){
mMapView.onPause();
if(mBMapMan!=null){
mBMapMan.stop();
super.onPause();
protected void onResume(){
mMapView.onResume();
if(mBMapMan!=null){
mBMapMan.start();
super.onResume();
3、在AndroidManifest.xml里注册和添加权限
[html][/html] view plaincopy
&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="/apk/res/android"
package="com.android.test"
android:versionCode="1"
android:versionName="1.0"
&!-- 添加屏幕及版本支持 --&
&supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true"/&
&uses-sdk android:minSdkVersion="7" /&
&!-- 在sdcard中创建/删除文件的权限 --&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&!-- 挂载和反挂载的权限 --&
&uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /&
&!-- 读取手机状态 ,如来了新电话--&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&!-- 震动权限 --&
&uses-permission android:name="android.permission.VIBRATE" /&
&!-- 网络访问权限 --&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&!-- 百度地图定位功能所需权限 --&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&permission android:name="android.permission.BAIDU_LOCATION_SERVICE" /&
&uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" /&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_GPS"/&
&uses-permission android:name="android.permission.READ_LOGS" /&
&application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black"
android:persistent="true" &
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
&!-- 百度定位服务
android:permission="android.permission.BAIDU_LOCATION_SERVICE"&--&
&service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"&
&/service&
&/application&
&/manifest&
上述代码个人做了些删除和修改,代码只包含主要的,如果有问题,请酌情修改配置即可。
然后程序效果如图:
百度定位号称使用GPS、网络定位(WIFI、基站)混合定位模式,现在我使用的是移动的2G手机网络,定位结果偏差还是很大的,因为它使用的基站定位,意思就是需找到了我手机发送信号的基站(信号塔)的位置,偏差至少500米,实际上我应该在紫薇北路附近。
但是当打开WIFI去定位,发现很准确,误差在50米以内!所以如果你在外面逛的话,建议打开WIFI联网,进行定位,效果更可靠。
如果你使用GPS定位的话,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵,呵呵。。。。
本文固定链接:
[上一篇][下一篇]
最新文章随机精彩热门排行
日志总数:3903 篇
评论总数:146 评
标签数量:4475 个
链接总数:4 条
建站日期:
运行天数:1321 天}

我要回帖

更多关于 百度离线地图开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信