定位KC10880109-i19使用百度地图API实现实时定位服务概要

百度api  时间:2021-02-24  阅读:()

使用百度地图AP I实现实时定位服务

第一步下载用到的开发包。

到 百 度地 图 API 网 站 http://developer.baidu.com/map/ 中 下 载libBMapApiEngine_v1_3_4. so、 liblocSDK_2.4. so以及jar文件baidumapapi. jar 地图API、 locSDK_2.6. jar 定位服务jar包此处用2.6版本在新建工程目录中的libs文件夹下新建一个文件夹命名为armeabi并把下载下来的libBMapApiEngine_v1_3_4. so、liblocSDK_2.4. so两个so文件放入其中再把baidumapapi. jar、locSDK_2.6. jar放入libs目录下右键选择每个jar文件选择Build Path-->Add to Build Path完成添加。

第二步配置AndroidManifest.xml文件。

权限配置

[mw_shl_code=java, true] <!--百度定位服务权限-->

<permissionandroid:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>

<uses-permissionandroid:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permission android:name="android.permission. INTERNET" />

<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

<uses-permissionandroid:name="android.permission.READ_LOGS"></uses-permission>[/mw_shl_code]

[mw_shl_code=java, true] <!--百度地图API权限-->

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<uses-permissionandroid:name="android.permission. INTERNET"></uses-permission>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission>[/mw_shl_code]

在application节点中加入定位Service组件

[mw_shl_code=java, true] <!--百度定位服务-->

<serviceandroid:name="com.baidu. location.f"android:enabled="true"android:permission="android.permission.BAIDU_LOCATION_SERVICE"android:process=":remote" >

<intent-filter>

<action android:name="com.baidu. location. service_v2.6" >

</action>

</intent-filter>

</service>[/mw_shl_code]

最后添加地图屏幕支持

[mw_shl_code=java, true] <supports-screens android: largeScreens="true"android:normalScreens="true" android:smallScreens="true"android:resizeable="true" android:anyDensity="true"/>[/mw_shl_code]

第三步编写布局文件在布局文件中添加百度地图的MapView。

[mw_shl_code=java, true]<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android: layout_width="match_parent"android: layout_height="match_parent"android:orientation="vertical" >

<Buttonandroid: id="@+id/lbs_btn"android: layout_width="wrap_content"android: layout_height="wrap_content"android:text="请求定位" />

<TextView

android: id="@+id/lbs_detail_tv"android: layout_width="wrap_content"android: layout_height="wrap_content"android:text="当前位置. . . " />

<com.baidu.mapapi.MapViewandroid: id="@+id/bmapsView"android: layout_width="fill_parent"android: layout_height="fill_parent"android:clickable="true" />

</LinearLayout>[/mw_shl_code]

第四步创建一个主Activity继承MapActivity。

[mw_shl_code=java, true]package com.example. lbsdemo;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.baidu. location.BDLocation;import com.baidu. location.BDLocationListener;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapView;public class MainActivity extends MapActivity implements OnClickListener{private TextView mLbsTextView;private TextView mPioTextView;private MapView mMapView;private LBSLocationClientController mLocationClientController;private LBSMapController mLbsMapController;

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState) ;setContentView(R. layout.main) ;

initializeButtons() ;initializeTextViews() ;initializeLocationClientController() ; //初始化定位客户端控制器initializeBMapView() ;initializeLBSMapController() ; //初始化定位地图控制器

}private void initializeLBSMapController() {mLbsMapController = new LBSMapController(this, mMapView) ;mLbsMapController. setZoomValue(12) ; //设置地图放大比例mLbsMapController.enableMyLocation() ; //启动我的当前位置mLbsMapController.enableCompass() ; //启用指南针

}private void initializeLocationClientController() {mLocationClientController=new LBSLocationClientController(this,new MyBDLocationListener() ) ;mLocationClientController. initializeLocationClientOption() ;

//初始化定位选项可调节

}private void initializeBMapView() {mMapView = (MapView) f indViewById(R. id.bmapsView) ;mMapView. setBuiltInZoomControls(true) ;//设置启用内置的缩放控件

}private void initializeTextViews() {mLbsTextView = (TextView) findViewById(R. id. lbs_detail_tv) ;

}private void initializeButtons() {

( (Button) findViewById(R. id. lbs_btn) ) . setOnClickListener(this) ;

}

@Overrideprotected void onResume() {super.onResume() ;mLocationClientController. startLocationClient() ;mLbsMapController. startBMapManager() ;

}

@Overrideprotected void onPause() {super.onPause() ;mLocationClientController. stopLocationClient() ;mLbsMapController. stopBMapManager() ;

}

@Overrideprotected void onDestroy() {super.onDestroy() ;mLbsMapController.destroyBMapManager() ;

}private class MyBDLocationListener implements BDLocationListener{

@Overridepublic void onReceiveLocation(BDLocation location) {

Log. i ("onReceiveLocation", "onReceiveLocation") ;if(location == null) return;mLbsMapController.resetCurrentCenter(location) ;//刷新地图

StringBuffer loactionSb =mLocationClientController.buildLocationStringBuffer(location) ;mLbsTextView. setText(loactionSb. toString() ) ;

}

@Overridepublic void onReceivePoi (BDLocation poiLocation) {if (poiLocation == null) return;

StringBuffer loactionSb =mLocationClientController.buildPIOStringBuffer(poiLocation) ;mPioTextView. setText(loactionSb. toString() ) ;

}

}

@Overrideprotected boolean isRouteDisplayed() {return false;

}

@Overridepublic void onClick(View v) {

switch (v.getId() ) {case R. id. lbs_btn:mLocationClientController.requestLocationInformation() ;break;default:break;

}

}

}

[/mw_shl_code]

第五步编写整合移动定位控制器类LBSLocationClientController 该类整合与定位相关数据和方法。

[mw_shl_code=java, true]package com.example. lbsdemo;import android.content.Context;import android.util.Log;import com.baidu. location.BDLocation;import com.baidu. location.BDLocationListener;import com.baidu. location.LocationClient;import com.baidu. location.LocationClientOption;public class LBSLocationClientController {private LocationClient mLocationClient;public LBSLocationClientController(

Context context, BDLocationListener listener) {initializeLocationClient(context, listener) ;

}private void initializeLocationClient(

Context context,BDLocationListener listener) {mLocationClient = new LocationClient(context) ;mLocationClient.registerLocationListener(listener) ;

}private boolean isLocationClientPrepared() {return mLocationClient != null &&

mLocationClient. isStarted() ;

}public void setLocationOption(LocationClientOption option) {mLocationClient. setLocOption(option) ;

}public void startLocationClient() {if(mLocationClient != null) {mLocationClient. start() ;

}

}public void stopLocationClient() {if(mLocationClient != null) {mLocationClient. stop() ;

}

}public void requestPIOInformation() {if(isLocationClientPrepared() ) {

Log. i ("requestPoi", "requestPoi") ;mLocationClient.requestPoi () ;

}

}public void requestLocationInformation() {if(isLocationClientPrepared() ) {

Log. i ("requestLocation", "requestLocation") ;mLocationClient.requestLocation() ;

}

}public StringBuffer buildLocationStringBuffer(BDLocation location) {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() ) ;

}return sb;

}public StringBuffer buildPIOStringBuffer(BDLocation poiLocation) {

StringBuffer sb = new StringBuffer(256) ;sb.append("Poi time : ") ;sb.append(poiLocation.getTime() ) ;sb.append("\nerror code : ") ;sb.append(poiLocation.getLocType() ) ;sb.append("\nlatitude : ") ;sb.append(poiLocation.getLatitude() ) ;sb.append("\nlontitude : ") ;sb.append(poiLocation.getLongitude() ) ;sb.append("\nradius : ") ;sb.append(poiLocation.getRadius() ) ;if (poiLocation.getLocType() ==BDLocation.TypeNetWorkLocation) {sb.append("\naddr : ") ;sb.append(poiLocation.getAddrStr() ) ;

}if(poiLocation.hasPoi () ) {sb.append("\nPoi:") ;sb.append(poiLocation.getPoi () ) ;

}else{sb.append("noPoi information") ;

}return sb;

}public void initializeLocationClientOption() {

LocationClientOption option=new LocationClientOption() ;option. setOpenGps(true) ;//开启GPSoption. setAddrType("detail") ;option. setCoorType("gcj02") ;option. setScanSpan(5000) ;option.disableCache(true) ;//禁止启用缓存定位option. setPoiNumber(5) ; //最多返回POI个数option. setPoiDistance(1000) ; //poi查询距离option. setPoiExtraInfo(true) ; //是否需要POI的电话和地址等详细信息setLocationOption(option) ;

}

}

[/mw_shl_code]

第六步编写整合地图显示控制器类LBSMapController该类整合地图显示相关操作。

这里用到的一个mapKeyString需要在百度API网站中根据您的工程名称去申请获取。public static final String BAIDU_MAP_API_KEY ="9996D9FE77258DC796FCF6B0F06B4FEF8517EF5A"

需要替换成您自己申请到的key。

[mw_shl_code=java, true]package com.example. lbsdemo;import android.content.Context;import android.util.Log;import android.widget.Toast;import com.baidu. location.BDLocation;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.MyLocationOverlay;public class LBSMapController {public static final String BAIDU_MAP_API_KEY =

"9996D9FE77258DC796FCF6B0F06B4FEF8517EF5A";//需要替换成你的keyprivate Context mContext;private MapView mMapView;

易探云香港云服务器价格多少钱1个月/1年?

易探云怎么样?易探云是目前国内少数优质的香港云服务器服务商家,目前推出多个香港机房的香港云服务器,有新界、九龙、沙田、葵湾等机房,还提供CN2、BGP及CN2三网直连香港云服务器。近年来,许多企业外贸出海会选择香港云服务器来部署自己的外贸网站,使得越来越多的用户会选择易探云作为网站服务提供平台。今天,云服务器网(yuntue.com)小编来谈谈易探云和易探云服务器怎么样?具体香港云服务器多少钱1个...

火数云 55元/月BGP限时三折,独立服务器及站群限时8折,新乡、安徽、香港、美国

火数云怎么样?火数云主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、专属服务器托管、带宽租用等产品和服务。火数云提供洛阳、新乡、安徽、香港、美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以及国际顶尖品牌硬件。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松快捷运用云计算!多年云计算领域服务经...

GigsGigsCloud(年付26美元)国际线路美国VPS主机

已经有一段时间没有听到Gigsgigscloud服务商的信息,这不今天看到商家有新增一款国际版线路的美国VPS主机,年付也是比较便宜的只需要26美元。线路上是接入Cogentco、NTT、AN2YIX以及其他亚洲Peering。这款方案的VPS主机默认的配置是1Gbps带宽,比较神奇的需要等待手工人工开通激活,不是立即开通的。我们看看这款服务器在哪里选择看到套餐。内存CPUSSD流量价格购买地址1...

百度api为你推荐
苹果5怎么越狱苹果5怎么越狱神雕侠侣礼包大全神雕侠侣手游华山论剑礼包有什么 怎么领取创维云电视功能谁能具体介绍一下创维云电视的主要功能,以及基本的使用方式,如果能分型号介绍就更好了,O(∩_∩)O谢谢ios系统苹果手机的系统是什么?网管工具网管软件好用吗?什么样的网管软件好呢?我想管理二十台电脑,让其中的四五台可以上网,其它的只能上局域网,谁能推荐一款软件吗?如果出钱买也可以!谢谢了!网管工具网吧工具有什么?cisco防火墙思科路由器上自带防火墙功能吗?淘宝软文范例做微商让淘宝代写一篇软文发布招代理有效果吗网页窗口最大化怎么把网页窗口调到最大化小米3大概要多少钱小米3换个屏幕大概多少钱?不要什么大概好像,答案准确点!
国外域名注册 我的世界服务器租用 便宜服务器 美国主机评论 便宜建站 nerd 免费cdn加速 鲜果阅读 一元域名 dux linux空间 域名转向 日本bb瘦 gspeed 网通服务器托管 yundun 美国盐湖城 万网主机 稳定空间 创速 更多