谁那里有王牌特工2黄金圈上映:黄金圈百度云网盘链接?求分享一下?谢谢兄弟姐妹们!

百度地图智能定位技术帮助开发者解决位置服务难题_网易新闻
百度地图智能定位技术帮助开发者解决位置服务难题
用微信扫码二维码
分享至好友和朋友圈
(原标题:百度地图智能定位技术帮助开发者解决位置服务难题)
6月26日,百度地图开放平台在北京中关村大街车库咖啡举办“百度地图职能定位”技术沙龙。在此次沙龙上,百度地图首次向外界详细解读和展示其高精尖的定位技术,通过这些开放的技术,开发者和合作企业可以更加轻松地解决其开发过程中遇到的位置服务难题,活动现场也吸引到了数百名开发者和技术爱好者现场聆听。
百度地图开放平台高级产品经理杨森在沙龙上介绍了百度地图智能定位服务,而百度地图高级技术经理韩兆兵、百度地图室内定位资深研发工程师贾海禄以及百度地图开放平台高级研发工程师张鑫则分别分享了定位相关的技术,特别是开发者常用的室内定位及个性化位置服务,并现场解答开发者相关问题。
百度地图开放平台高级产品经理杨森介绍到,百度地图的智能定位服务,可以帮助开发者更好的解决位置获取难题,并让用户搜索结果更加智能,让海量移动应用拥有定位服务能力,最大化助力开发者更人性化解决“你在哪?”的难题。基于百度地图定位、智能挖掘和自我学习技术,百度地图此前已经向开发者开放了地址信息解析能力、基础位置描述能力、周边POI检索能力,让他们可以更加轻松地为自己的产品加入定位及位置相关服务。他还表示,百度地图开放平台未来还将开放更多领先的定位技术给开发者,包含室内精准定位服务、高精度IP定位服务、更精确的到店识别服务、个性化位置描述服务等一系列定位技术能力。
沙龙现场,百度地图开放平台团队还向现场开发者们详细介绍了“室内定位技术”和“个性化位置服务”两大定位服务。
百度地图室内定位资深研发工程师贾海禄介绍,百度地图开放平台所使用的室内高精度定位服务的技术包含三角定位、地磁技术、增强WiFi指纹模型等,室内定位精度达到1-3米。高精度室内定位技术是商场内寻找店铺、室内消息推送、停车场反向找车等业务发展的基础,后续我们将通过SDK的形式对外开放室内高精度定位服务,促进这些室内场景下业务需求的快速发展。
而在定位服务应用中,个性化位置描述已经成为用户出行和生活服务的常用功能。个性化位置描述可以根据业务需要进行自定义位置描述,比如专车、拼车类开发者可定义常用上下车地点,从而根据用户当前位置进行最优推荐,提升用户体验,百度地图与Uber、嘀嗒拼车等打车软件的合作就是成功典型。
目前,百度地图定位开放服务每天响应来自各行各业超过300亿次的定位请求,定位服务在开发者市场占有率达到70%,成为众多LBS开发者定位服务的首选。百度地图开放平台高级产品经理杨森在沙龙现场表示:“百度地图开放平台面向广大开发者提供最优质的LBS服务,旨在帮助开发者解决业务发展过程中所遇到的各种难题,进而促进开发者业务发展,提升开发者应用用户体验。垂直细分行业大部分主流应用都引入了百度地图智能定位服务,我们也愿意与开发者一同构建LBS服务生态,打开更广的产品空间”。
本文来源:华龙网-重庆晚报
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈下次自动登录
现在的位置:
& 综合 & 正文
使用百度地图定位SDK获取定位信息。
最近了解了下百度地图SDK,记录下。
百度给出了详细的开发者文档,可以参见,其中百度地图SDK现在将定位单独弄出来个SDK,现在讲下我对定位SDK的一些封装。
关于定位SDK的使用,百度讲的很详细了,我就不再赘述。详细参见:
将我的封装应用情景大致说下:假定APP偶尔定位,在APP的不同Activity或者不同情境下有可能需要请求定位,在某种情况下某个Activity可以主动关闭定位。定位信息获取之后需要关闭定位,并且将定位信息传递给某个Activity或者某个请求者。对这些需求进行封装。
解决的办法如下:
自定义一个Application,在Application对定位进行封装。如下:
public class LocationApplication extends Application {
private LocationClient locationClient =
private LocationListenner myListener = new LocationListenner();
// 百度定位SDK可以返回三种坐标系,分别是bd09, bd09ll和gcj02,其中bd09ll能无偏差地显示在百度地图上。
// gcj02是测局制定的。
private static final String COOR_TYPE = "gcj02";
private static final String BAIDU_LOCAL_SDK_SERVICE_NAME = "com.baidu.location.service_v2.9";
// 定位sdk提供2种定位模式,定时定位和app主动请求定位。
// setScanSpan & 1000 则为 app主动请求定位;
// setScanSpan&=1000,则为定时定位模式(setScanSpan的值就是定时定位的时间间隔))
// 定时定位模式中,定位sdk会按照app设定的时间定位进行位置更新,定时回调定位结果。
// 此种定位模式适用于希望获得连续定位结果的情况。
// 对于单次定位类应用,或者偶尔需要一下位置信息的app,可采用app主动请求定位这种模式。
private static final int SCAN_SPAN_TIME = 500;
private static final String PRODUCT_NAME = "com.youku.paike";
private DataFeedbackListener dataFeedbackL
public void onCreate() {
locationClient = new LocationClient(this);
locationClient.registerLocationListener(myListener);
setLocationOption();
super.onCreate();
// 设置相关参数
private void setLocationOption() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
// 设置坐标类型 ,
option.setCoorType(COOR_TYPE);
option.setServiceName(BAIDU_LOCAL_SDK_SERVICE_NAME);
option.setPoiExtraInfo(true);
// 可以返回地理位置信息,例如“北京市海淀区海淀大街8号”,必须设置all并且是wifi定位的情况下才可以拿到详细地理位置信息
option.setAddrType("all");
option.setScanSpan(SCAN_SPAN_TIME);
option.setPriority(LocationClientOption.NetWorkFirst); // 设置网络优先,不设置,默认是gps优先
option.setPoiNumber(10);
option.disableCache(true);// true表示禁用缓存定位,false表示启用缓存定位
option.setProdName(PRODUCT_NAME);
locationClient.setLocOption(option);
public void setDataFeedbackListener(DataFeedbackListener dataFeedbackListener) {
this.dataFeedbackListener = dataFeedbackL
* 开始定位
* @Title: startLocate
* @return void
下午4:32:26
public void startLocate() {
if (locationClient.isStarted()) {
locationClient.requestLocation();
locationClient.start();
* 想主动结束定位调用这个方法
* @Title: stopLocate
* @return void
下午4:31:12
public void stopLocate() {
if (locationClient.isStarted()) {
locationClient.stop();
* 定位返回值的监听
* @Package com.baidu.locTest
* @ClassName: LocationListenner
下午4:31:49
class LocationListenner implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
if (location == null)
if (location.getLatitude() & 0 || location.getLongitude() & 0) {
dataFeedbackListener.onReceiver(location);
locationClient.stop();
locationClient.requestLocation();
public void onReceivePoi(BDLocation poiLocation) {
if (poiLocation == null) {
然后在我们的某个Activity进行定位请求,处理方式如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTv = (TextView)findViewById(R.id.textview);
mStartBtn = (Button)findViewById(R.id.StartBtn);
location = ((LocationApplication)getApplication());
location.setDataFeedbackListener(new DataFeedbackListener(){
public void onReceiver(BDLocation location) {
// TODO Auto-generated method stub
displayLocation(location);
//开始定位按钮
mStartBtn.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
location.startLocate();
private void displayLocation(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());
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.d("lzc", "latitude============&" + latitude
+ ", longitude============&" + longitude);
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());
location.getAddrStr();
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
sb.append("\naddr : ");
Log.d("lzc",
"location addr=====================&"
+ location.getAddrStr());
sb.append(location.getAddrStr());
sb.append("\nsdk version : ");
//sb.append(mLocClient.getVersion());
sb.append("\nisCellChangeFlag : ");
sb.append(location.isCellChangeFlag());
mTv.setText(sb.toString());
有问题交流。
&&&&推荐文章:
【上篇】【下篇】查看: 4228|回复: 4
百度地图BaiduMap之LocationClient本地定位
TA的每日心情开心 21:44签到天数: 267 天[LV.8]以坛为家I
1.AndroidManifest.xml文件配置在application标签中声明service组件,为了避免多个app公用1个service出现的权限问题,新版本各个app单独拥有自己的定位service.
&!-- com.baidu.location.f 为百度定位的服务 --&&&
&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 android:name=&android.permission.ACCESS_FINE_LOCATION&/&&&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE&/&&&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE&/&&&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE&/&&&
&uses-permission android:name=&android.permission.READ_PHONE_STATE&/&&&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&&&
&uses-permission android:name=&android.permission.INTERNET& /&&&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS&/&&&
&uses-permission android:name=&android.permission.READ_LOGS&/&&&复制代码2.定位过程
(1).实例化LocationClient{&&
& & //Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context&&
& & mLocationClient = new LocationClient(getApplicationContext());&&
& & mLocationClient.setAK(&我的密钥&);//写入密钥&&
& & //注册监听函数&&
& & mLocationClient.registerLocationListener( myListener );& &
}&&复制代码(2).实现BDLocationListener接口public class MyLocationListener implements BDLocationListener {
& & @Override
& & public void onReceiveLocation(BDLocation location) {
& & & & & & /*
& & & & & &&&* mLocClient.requestLocation();执行后,前提client已经开启
& & & & & &&&*/
& & & & & & if (location == null)
& & & && &&&& & & &
& & & & & & if (location.getLocType() == BDLocation.TypeGpsLocation){//卫星定位
& & & && &&&& & & & location.getSpeed();
& & & && &&&& & & & location.getSatelliteNumber();
& & & && &&&} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){//网络定位
& & & && &&&& & & & location.getAddrStr();//LocationClientOption.setAddrType(&all&);需要设置
& & & && &&&}
& & }
& & public void onReceivePoi(BDLocation poiLocation) {
& & & & & & /*
& & & & & &&&* mLocClient.requestPoi();执行后,前提client已经开启
& & & & & &&&*/
& & & && &&&if (poiLocation == null){
& & & && &&&
& & & && &&&}
& & & && &&&poiLocation.getTime();
& & & && &&&poiLocation.getLocType();
& & & && &&&poiLocation.getLatitude();
& & & && &&&poiLocation.getLongitude();
& & & && &&&poiLocation.getRadius();
& & & && &&&if (poiLocation.getLocType() == BDLocation.TypeGpsLocation){//卫星定位
& & & && &&&& & & & poiLocation.getSpeed();
& & & && &&&& & & & poiLocation.getSatelliteNumber();
& & & && &&&} else if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){//网络定位
& & & && &&&& & & & poiLocation.getAddrStr();//LocationClientOption.setAddrType(&all&);需要设置
& & & && &&&}
& & }
}复制代码(3).设置定位参数LocationClientOption option = new LocationClientOption();&&
option.setOpenGps(true);& & //打开GPS&&
&&
/*
* 返回的定位结果包含地址信息, 如果不设置,location.getAddrStr();返回为null
*/&&
option.setAddrType(&all&);& &
option.setCoorType(&bd09ll&);//返回的定位结果是百度经纬度,默认值gcj02&&
option.setScanSpan(1000 * 60);&&//设置发起定位请求的间隔时间&&
option.disableCache(true);&&//禁止启用缓存定位&&
option.setPoiNumber(5);& &&&//最多返回POI个数&&
option.setPoiDistance(1000); //poi查询距离&&
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息&&
mClient.setLocOption(getClientOptions()); 复制代码(4).发起定位请求/**
* 在请求定位之前应该确定mCLient已经启动
*/&&
if (mClient != null && mClient.isStarted())&&
& & mClient.requestLocation();&&
& & //onReceiveLocation();将得到定位数据&&
else{&&
&&
}&&复制代码// 发起POI查询请求&&
if (mClient != null && mClient.isStarted())&&
& & mClient.requestPoi();&&
& & //onReceivePoi();将得到定位数据&&
else{&&
&&
}&&复制代码3.MyLocationOverlay覆盖物// MyLocationOverlay实例化&&
locationOverlay = new MyLocationOverlay(mMapView);&&
locationOverlay.enableCompass();&&
locationData = new LocationData();&&
// 设置定位数据&&
locationOverlay.setData(locationData);&&
// 设置中心图片&&
// locationOverlay.setMarker(getResources().getDrawable(R.drawable.ic_launcher));&&
// 设置定位的模式(NORMAL, FOLLOWING,COMPASS )三种&&
locationOverlay.setLocationMode(LocationMode.FOLLOWING);&&
&&
// 添加定位图层&&
mMapView.getOverlays().add(locationOverlay);&&
// 修改定位数据后刷新图层生效&&
mMapView.refresh();&&复制代码如果想处理MyLocationOverlay的tap时间,必须覆写dispatchTap()方法,但是mMapController.enableClick(true)/**
* 覆写MyLocationOverlay,处理Tap(简单的click)事件
*/&&
private class LocationOverlay extends MyLocationOverlay {&&
&&
& & public LocationOverlay(MapView mapView) {&&
& && &&&super(mapView);&&
& & }&&
&&
& & @Override&&
& & protected boolean dispatchTap() {&&
& && &&&/*
& && && &* click事件的处理,如果想处理事件必须,mMapController.enableClick(true);
& && && &* 否则无响应
& && && &*/&&
& && &&&Toast.makeText(getApplicationContext(), &click~~&, 0).show();&&
& && &&&&&
& & }&&
&&
}&&复制代码4.定位实例/**
* @author zimo
* @see http://blog.csdn.net/zimo2013
*/
public class LocationProvider {
& & & & private static final String TAG = &LocationProvider&;
& & & &
& & & & private LocationClient mC
& & & & private BDLocationListener mL
& & & &
& & & & public LocationProvider(Context context){
& & & & & & & & mClient = new LocationClient(context);
& & & & & & & & //配置密钥key
& & & & & & & & mClient.setAK(&我的密钥&);
& & & & & & & & //配置定位参数信息
& & & && &&&mClient.setLocOption(getClientOptions());
& & & & }
& & & &
& & & & /**
& & & &&&* 请求开始定位
& & & &&&*/
& & & & public void start(){
& & & & & & & & if(mListener == null){
& & & & & & & & & & & & LogUtil.e(TAG, &请在调用start()之前,先调用setLocationListener设定监听器&);
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & if(!mClient.isStarted()){
& & & & & & & & & & & & LogUtil.i(TAG, &定位开启!&);
& & & & & & & & & & & & mClient.start();
& & & & & & & & }
& & & & & & & & mClient.requestLocation();
& & & & }
& & & & public void stop(){
& & & & & & & & if(mClient.isStarted()){
& & & & & & & & & & & & LogUtil.i(TAG, &定位关闭!&);
& & & & & & & & & & & & mClient.stop();
& & & & & & & & }
& & & & }
& & & &
& & & & public void setLocationListener(BDLocationListener l){
& & & & & & & & mListener =
& & & & & & & & mClient.registerLocationListener(l);
& & & & }
& & & &
& & & & private LocationClientOption getClientOptions(){
& & & & & & & &
& & & & & & & & LocationClientOption option = new LocationClientOption();
& & & && &&&option.setOpenGps(true);& & & & //打开GPS
& & & && &&&/*
& & & && && &* 返回的定位结果包含地址信息, 如果不设置,location.getAddrStr();返回为null
& & & && && &*/
& & & && &&&option.setAddrType(&all&);& & & &
& & & && &&&option.setCoorType(&bd09ll&);//返回的定位结果是百度经纬度,默认值gcj02
& & & && &&&option.setScanSpan(1000 * 60);& & & & //设置发起定位请求的间隔时间
& & & && &&&option.disableCache(true);& & & & //禁止启用缓存定位
& & & && &&&option.setPoiNumber(5);& & & & & & & & //最多返回POI个数
& & & && &&&option.setPoiDistance(1000); //poi查询距离
& & & && &&&option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息
& & & && &&&
& & & & }
}复制代码public class MainActivity extends Activity implements BDLocationListener {
& & & & BMapManager mBMapMan =
& & & & MapView mMapView =
& & & & LocationC
& & & & LocationData locationD
& & & & MyLocationOverlay locationO
& & & & MapController mMapC
& & & & LocationP
& & & & @Override
& & & & protected void onCreate(Bundle savedInstanceState) {
& & & & & & & & super.onCreate(savedInstanceState);
& & & & & & & & mBMapMan = new BMapManager(getApplication());
& & & & & & & & mBMapMan.init(&647a2ed6e1e6d5db525e177&, null);
& & & & & & & & // 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
& & & & & & & & setContentView(R.layout.activity_main);
& & & & & & & & mMapView = (MapView) findViewById(R.id.bmapsView);
& & & & & & & & mMapView.setBuiltInZoomControls(true);
& & & & & & & &
& & & & & & & & mMapController = mMapView.getController();
& & & & & & & & // 设置启用内置的缩放控件
& & & & & & & & mMapController.setZoom(14);
& & & & & & & & // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
& & & & & & & & GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
& & & & & & & & & & & & & & & & (int) (116.404 * 1E6));
& & & & & & & & // 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
& & & & & & & & mMapController.setCenter(point);// 设置地图中心点
& & & & & & & & mMapController.setZoom(14);// 设置地图zoom级别
& & & & & & & & locationData = new LocationData();
& & & & & & & & locationOverlay = new MyLocationOverlay(mMapView);
& & & & & & & & // 设置定位数据
& & & & & & & & locationOverlay.setData(locationData);
& & & & & & & & // 添加定位图层
& & & & & & & & mMapView.getOverlays().add(locationOverlay);
& & & & & & & & locationOverlay.enableCompass();
& & & & & & & & // 修改定位数据后刷新图层生效
& & & & & & & & mMapView.refresh();
& & & & }
& & & & public void click(View view) {
& & & & & & & & //click button请求定位
& & & & & & & & provider = new LocationProvider(getApplicationContext());
& & & & & & & & provider.setLocationListener(this);
& & & & & & & & provider.start();& & & & //开始定位
& & & & }
& & & & @Override
& & & & public void onReceiveLocation(BDLocation location) {
& & & & & & & & locationData.latitude = location.getLatitude();
& & & & & & & & locationData.longitude = location.getLongitude();
& & & & & & & & // 如果不显示定位精度圈,将accuracy赋值为0即可
& & & & & & & & locationData.accuracy = location.getRadius();
& & & & & & & & // 此处可以设置 locData的方向信息, 如果定位 SDK 未返回方向信息,用户可以自己实现罗盘功能添加方向信息。
& & & & & & & & locationData.direction = location.getDerect();
& & & & & & & & // 更新定位数据
& & & & & & & & locationOverlay.setData(locationData);
& & & & & & & & // 更新图层数据执行刷新后生效
& & & & & & & & mMapView.refresh();
& & & & & & & & Toast.makeText(getApplicationContext(), location.getAddrStr(), 1)
& & & & & & & & & & & & & & & & .show();
& & & & & & & & mMapController.animateTo(new GeoPoint(
& & & & & & & & & & & & & & & & (int) (locationData.latitude * 1e6),
& & & & & & & & & & & & & & & & (int) (locationData.longitude * 1e6)));
& & & & }
& & & & @Override
& & & & public void onReceivePoi(BDLocation location) {
& & & & }
& & & & @Override
& & & & protected void onResume() {
& & & & & & & & mMapView.onResume();
& & & & & & & & if (mBMapMan != null) {
& & & & & & & & & & & & mBMapMan.start();
& & & & & & & & }
& & & & & & & & super.onResume();
& & & & }
& & & &
& & & & @Override
& & & & protected void onPause() {
& & & & & & & & mMapView.onPause();
& & & & & & & & if (mBMapMan != null) {
& & & & & & & & & & & & mBMapMan.stop();
& & & & & & & & }
& & & & & & & & //如果没有必要,应该停止定位
& & & & & & & & if(provider != null){
& & & & & & & & & & & & provider.stop();
& & & & & & & & & & & & provider =
& & & & & & & & }
& & & & & & & & super.onPause();
& & & & }
& & & & @Override
& & & & protected void onDestroy() {
& & & & & & & & mMapView.destroy();
& & & & & & & & if (mBMapMan != null) {
& & & & & & & & & & & & mBMapMan.destroy();
& & & & & & & & & & & & mBMapMan =
& & & & & & & & }
& & & & & & & & super.onDestroy();
& & & & }
}复制代码
TA的每日心情郁闷 12:11签到天数: 20 天[LV.4]偶尔看看III
这个定位能精准定位吗
TA的每日心情开心 20:47签到天数: 5 天[LV.2]偶尔看看I
惨了,被人家定位的话,被人家打劫了咋办
TA的每日心情开心 22:11签到天数: 2 天[LV.1]初来乍到
TA的每日心情开心 15:55签到天数: 1 天[LV.1]初来乍到
很多软件都可以定位我们这些用户吧?
Beijing Aptech Beida Jade Bird Information Technology Co.,Ltd
北大青鸟IT教育 北京阿博泰克北大青鸟信息技术有限公司 版权所有[操作系统]关于如何在安卓的百度地图开发里面简单实现持续定位
你的位置:
[操作系统]关于如何在安卓的百度地图开发里面简单实现持续定位
这几天自己研究了关于地手机上面开发安卓地图的问题,发现百度官方示例demo讲解百度持续定位方面还是讲解的有些不清楚,本人研究了几次之后将其弄得更详细以便于让各位方便学习,有不足之处请在评论区指出,官方示例的网址是:/index.php?title=android-locsdk/guide/v5-0上面的网址已经将安卓简单配置百度地图环境讲解的很详细了,再次不做赘述了,此外,可能会有人发现 1 package com.example. 2
3 import java.util.L 4 import java.util.T 5 import java.util.TimerT 6
7 import android.app.A 8 import android.content.ContentV 9 import android.content.I 10 import android.database.C 11 import android.os.B 12 import android.os.H 13 import android.os.M 14 import android.text.method.ScrollingMovementM 15 import android.util.L 16 import android.view.M 17 import android.view.MenuI 18 import android.view.V 19 import android.view.View.OnClickL 20 import android.widget.B 21 import android.widget.TextV 22 import android.widget.T 23
24 import com.baidu.location.BDL 25 import com.baidu.location.BDLocationL 26 import com.baidu.location.LocationC 27 import com.baidu.location.LocationClientO 28 import com.baidu.location.BDNotifyL//假如用到位置提醒功能,需要import该类 29 import com.baidu.location.LocationClientOption.LocationM 30 import com.baidu.location.P 31 import com.baidu.mapapi.SDKI 32 import com.baidu.mapapi.map.MapV 33
34 public class MainActivity extends Activity implements OnClickListener{ 35
MapView mMapView =
public static final String TAG="mian"; 37
StringBuffer sb = new StringBuffer(256); 38
public StringBuilder builder=new StringBuilder(); 39
private Button bt1; 40
private TextView tv1; 41
private DBtools DB 42
boolean isOpenLocation= 43
public LocationClient mLocationClient = 44
public BDLocationListener myListener = new MyLocationListener(); 45
@Override 46
protected void onCreate(Bundle savedInstanceState) { 47
super.onCreate(savedInstanceState); 48
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main); 50
DBhelper = new DBtools(this);
tv1=(TextView) findViewById(R.id.textView1); 52
tv1.setMovementMethod(new ScrollingMovementMethod()); 53
bt1=(Button) findViewById(R.id.button1); 54
bt1.setOnClickListener(this); 55
mMapView = (MapView) findViewById(R.id.bmapView);
mLocationClient = new LocationClient(getApplicationContext());
//声明LocationClient类 57
mLocationClient.registerLocationListener( myListener );
//注册监听函数 58
initLocation(); 59
private void initLocation(){ 61
LocationClientOption option = new LocationClientOption(); 62
option.setLocationMode(LocationMode.Hight_Accuracy 63 );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 64
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系 65
int span=0; 66
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 67
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 68
option.setOpenGps(true);//可选,默认false,设置是否使用gps 69
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 70
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” 71
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 72
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 74
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 75
mLocationClient.setLocOption(option); 76
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
public class MyLocationListener implements BDLocationListener { 96
@Override 98
public void onReceiveLocation(BDLocation location) { 99
//Receive Location100
StringBuffer sb = new StringBuffer(256);101
sb.append("time : ");102
sb.append(location.getTime());103
sb.append("\nerror code : ");104
sb.append(location.getLocType());105
sb.append("\nlatitude : ");106
sb.append(location.getLatitude());107
sb.append("\nlontitude : ");108
sb.append(location.getLongitude());109
sb.append("\nradius : ");110
sb.append(location.getRadius());111
if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果112
sb.append("\nspeed : ");113
sb.append(location.getSpeed());// 单位:公里每小时114
sb.append("\nsatellite : ");115
sb.append(location.getSatelliteNumber());116
sb.append("\nheight : ");117
sb.append(location.getAltitude());// 单位:米118
sb.append("\ndirection : ");119
sb.append(location.getDirection());// 单位度120
sb.append("\naddr : ");121
sb.append(location.getAddrStr());122
sb.append("\ndescribe : ");123
sb.append("gps定位成功");124 125
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果126
sb.append("\naddr : ");127
sb.append(location.getAddrStr());128
//运营商信息129
sb.append("\noperationers : ");130
sb.append(location.getOperators());131
sb.append("\ndescribe : ");132
sb.append("网络定位成功");133
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果134
sb.append("\ndescribe : ");135
sb.append("离线定位成功,离线定位结果也是有效的");136
} else if (location.getLocType() == BDLocation.TypeServerError) {137
sb.append("\ndescribe : ");138
sb.append("服务端网络定位失败,,会有人追查原因");139
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {140
sb.append("\ndescribe : ");141
sb.append("网络不同导致定位失败,请检查网络是否通畅");142
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {143
sb.append("\ndescribe : ");144
sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");145
sb.append("\nlocationdescribe : ");147
sb.append(location.getLocationDescribe());// 位置语义化信息148
List&Poi& list = location.getPoiList();// POI数据149
if (list != null) {150
sb.append("\npoilist size = : ");151
sb.append(list.size());152
for (Poi p : list) {153
sb.append("\npoi= : ");154
sb.append(p.getId() + " " + p.getName() + " " + p.getRank());155
Log.i("BaiduLocationApiDem", sb.toString());158
DBtools dbhelper=new DBtools(getApplicationContext());159
ContentValues initialValues = new ContentValues();160
initialValues.put("shijian",location.getTime());161
initialValues.put("didian",location.getLatitude()+"--"+location.getLongitude());162
dbhelper.open();163
dbhelper.insert("path",initialValues);164
dbhelper.close();165
tv1.setText(sb.toString());
@Override170
public void onClick(View arg0) {171
Thread mytime=new Thread(new ThreadShow());172
if(isOpenLocation){173
mLocationClient.stop();174
isOpenLocation= 175
Toast.makeText(getApplicationContext(), "开启", Toast.LENGTH_SHORT).show();
isOpenLocation=180
//mLocationClient.start();181
mytime.start(); 182
// handler类接收数据 186
Handler handler = new Handler() { 187
public void handleMessage(Message msg) { 188
if (msg.what == 1) { 189
Log.i("BaiduLocationApiDem", "加以");190
mLocationClient.start();191
mLocationClient.requestLocation(); 192
// 线程类 196
class ThreadShow implements Runnable { 197
@Override 199
public void run() { 200
// TODO Auto-generated method stub 201
while (isOpenLocation) { 202
mLocationClient.stop();204
Thread.sleep(2000); 205
Message msg = new Message(); 206
msg.what = 1; 207
handler.sendMessage(msg); 208
// System.out.println("send..."); 209
} catch (Exception e) { 210
// TODO Auto-generated catch block 211
e.printStackTrace(); 212
System.out.println("thread error..."); 213
这里面关于mLocationClient.stop();mLocationClient.start();& mLocationClient.requestLocation(); 这三个函数我有必要讲解一下,因为持续定位时这三个函数的配合使用很重要,官方文档里面解释说mLocationClient.start()函数用于开启定位,mLocationClient.requestLocation()函数用于主动触发定位SDK内部定位逻辑,个人感觉差不多,两个都会执行我的mLocationClient的所属类里面的逻辑代码,可能是我的项目就这样吧,然后是mLocationClient.stop(),此函数用于停止定位,如果持续定位的话,是需要和mLocationClient.start()函数配合使用的,具体在上面的代码里面有展示。切记不要将mLocationClient.start()和mLocationClient.stop()一起使用,我在网上查询时好像是说一部原因,具体举一个例子吧:&1 //某段代码如果是这样的话按照逻辑韩式会将mLocationClient所属类的里面逻辑代码执行一遍,具体见MainAvtivity里面的MyLocationListener类内容,但是实际上是不会执行的2 mLocationClient.start();3 mLocationClient.stop();&所以在我的MainActivity里面我使用线程来一遍遍的执行start和stop函数,这样就会消除刚刚说的这种效果,最后就能够实现持续定位了。&在此给出我的布局文件配合看看&LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.newloca.MainActivity" &&RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp"&
&com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" /&&/RelativeLayout&
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="150dp"
android:scrollbars="vertical"
android:background="#f00"
android:text="位置信息" /&
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="获取位置" /&
&/RelativeLayout&&/LinearLayout&其他像权限什么的配置,用最开始给的官方地址里面的就行了&顺便说一下,本人是使用的安卓4.2版本开发的,手机真机调试和虚拟机调试在定位的时间间隔上面会有点误差,也不知道什么原因&
、 、 、 、 、

我要回帖

更多关于 王牌特工2黄金圈上映 的文章

 

随机推荐