新功能添加:

第一,定位功能;第二,與方向傳感器結合,通過旋轉手機進行道路的方向確認。

1、初次啟動定位

/**

* 定位的客戶端

*/

privateLocationClient mLocationClient;

/**

* 定位的監聽器

*/

publicMyLocationListener mMyLocationListener;

/**

* 當前定位的模式

*/

privateLocationMode mCurrentMode = LocationMode.NORMAL;

/***

* 是否是第一次定位

*/

privatevolatilebooleanisFristLocation =true;

/**

* 初始化定位相關代碼

*/

privatevoidinitMyLocation()

{

// 定位初始化

mLocationClient = newLocationClient(this);

mMyLocationListener = newMyLocationListener();

mLocationClient.registerLocationListener(mMyLocationListener);

// 設置定位的相關配置

LocationClientOption option = newLocationClientOption();

option.setOpenGps(true);// 打開gps

option.setCoorType("bd09ll");// 設置坐標類型

option.setScanSpan(1000);

mLocationClient.setLocOption(option);

}

然后是定位的監聽器MyLocationListener:

/**

* 實現實位回調監聽

*/

publicclassMyLocationListenerimplementsBDLocationListener

{

@Override

publicvoidonReceiveLocation(BDLocation location)

{

// map view 銷毀后不在處理新接收的位置

if(location ==null|| mMapView ==null)

return;

// 構造定位數據

MyLocationData locData = newMyLocationData.Builder()

.accuracy(location.getRadius())

// 此處設置開發者獲取到的方向信息,順時針0-360

.direction(mXDirection).latitude(location.getLatitude())

.longitude(location.getLongitude()).build();

mCurrentAccracy = location.getRadius();

// 設置定位數據

mBaiduMap.setMyLocationData(locData);

mCurrentLantitude = location.getLatitude();

mCurrentLongitude = location.getLongitude();

// 設置自定義圖標

BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory

.fromResource(R.drawable.navi_map_gps_locked);

MyLocationConfigeration config = newMyLocationConfigeration(

mCurrentMode, true, mCurrentMarker);

mBaiduMap.setMyLocationConfigeration(config);

// 第一次定位時,將地圖位置移動到當前位置

if(isFristLocation)

{

isFristLocation = false;

LatLng ll = newLatLng(location.getLatitude(),

location.getLongitude());

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

mBaiduMap.animateMapStatus(u);

}

}

}

可以看到,我們初始化了定位的參數,設置了定位的監聽器,每隔1s會進行一次定位,應用打開時,第一定位,會把地圖中心設置當前用戶位置。

定位也是比較耗電的,所以我們在onStart中開啟定位,在onStop中關閉定位~~這樣應用最小化時就不會一直在哪GPS請求定位了,用戶要是看你app一直在那定位,估計馬上就被卸載了~

@Override

protectedvoidonStart()

{

// 開啟圖層定位

mBaiduMap.setMyLocationEnabled(true);

if(!mLocationClient.isStarted())

{

mLocationClient.start();

}

// 開啟方向傳感器

myOrientationListener.start();

super.onStart();

}

@Override

protectedvoidonStop()

{

// 關閉圖層定位

mBaiduMap.setMyLocationEnabled(false);

mLocationClient.stop();

// 關閉方向傳感器

myOrientationListener.stop();

super.onStop();

}

上面的傳感器的代碼,一會就會介紹~

記得在AndroidManifest.xml配一個service

android:name="com.baidu.location.f"

android:enabled="true"

android:process=":remote">

現在基本的定位功能已經實現了~不過我們還需要添加點擊定位按鈕和方向傳感器

2、我的位置

點擊我的位置菜單會調用center2myLoc方法。

caseR.id.id_menu_map_myLoc:

center2myLoc();

break;

/**

* 地圖移動到我的位置,此處可以重新發定位請求,然后定位;

* 直接拿最近一次經緯度,如果長時間沒有定位成功,可能會顯示效果不好

*/

privatevoidcenter2myLoc()

{

LatLng ll = newLatLng(mCurrentLantitude, mCurrentLongitude);

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

mBaiduMap.animateMapStatus(u);

}

很簡單,我們在定位的監聽器中已經保存了最近一次的定位經緯度,所以只需要點擊時,把地圖移動到相應的位置即可。

3、集成方向傳感器

首先是封裝的方向傳感器的類MyOrientationListener.java

packagecom.zhy.zhy_baidu_ditu_demo00;

importandroid.content.Context;

importandroid.hardware.Sensor;

importandroid.hardware.SensorEvent;

importandroid.hardware.SensorEventListener;

importandroid.hardware.SensorManager;

publicclassMyOrientationListenerimplementsSensorEventListener

{

privateContext context;

privateSensorManager sensorManager;

privateSensor sensor;

privatefloatlastX ;

privateOnOrientationListener onOrientationListener ;

publicMyOrientationListener(Context context)

{

this.context = context;

}

// 開始

publicvoidstart()

{

// 獲得傳感器管理器

sensorManager = (SensorManager) context

.getSystemService(Context.SENSOR_SERVICE);

if(sensorManager !=null)

{

// 獲得方向傳感器

sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

}

// 注冊

if(sensor !=null)

{//SensorManager.SENSOR_DELAY_UI

sensorManager.registerListener(this, sensor,

SensorManager.SENSOR_DELAY_UI);

}

}

// 停止檢測

publicvoidstop()

{

sensorManager.unregisterListener(this);

}

@Override

publicvoidonAccuracyChanged(Sensor sensor,intaccuracy)

{

}

@Override

publicvoidonSensorChanged(SensorEvent event)

{

// 接受方向感應器的類型

if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)

{

// 這里我們可以得到數據,然后根據需要來處理

floatx = event.values[SensorManager.DATA_X];

if( Math.abs(x- lastX) >1.0)

{

onOrientationListener.onOrientationChanged(x);

}

//            Log.e("DATA_X", x+"");

lastX = x ;

}

}

publicvoidsetOnOrientationListener(OnOrientationListener onOrientationListener)

{

this.onOrientationListener = onOrientationListener ;

}

publicinterfaceOnOrientationListener

{

voidonOrientationChanged(floatx);

}

}

在onCreate中初始化方向傳感器

/**

* 初始化方向傳感器

*/

privatevoidinitOritationListener()

{

myOrientationListener = newMyOrientationListener(

getApplicationContext());

myOrientationListener

.setOnOrientationListener(newOnOrientationListener()

{

@Override

publicvoidonOrientationChanged(floatx)

{

mXDirection = (int) x;

// 構造定位數據

MyLocationData locData = newMyLocationData.Builder()

.accuracy(mCurrentAccracy)

// 此處設置開發者獲取到的方向信息,順時針0-360

.direction(mXDirection)

.latitude(mCurrentLantitude)

.longitude(mCurrentLongitude).build();

// 設置定位數據

mBaiduMap.setMyLocationData(locData);

// 設置自定義圖標

BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory

.fromResource(R.drawable.navi_map_gps_locked);

MyLocationConfigeration config = newMyLocationConfigeration(

mCurrentMode, true, mCurrentMarker);

mBaiduMap.setMyLocationConfigeration(config);

}

});

}

最后在onStart和onStop中分別開啟和關閉方向傳感器。

對於旋轉手機確定方向,實際上利用了

newMyLocationData.Builder()

//此處設置開發者獲取到的方向信息,順時針0-360                                                                                                .direction(mXDirection)

只需要把x方向的角度設置即可!

android 百度地图3.0定位,Android 百度地圖 SDK v3.0.0 (二) 定位與結合方向傳感器...相关推荐

  1. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  2. php 嵌入手机百度地图,C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点:WebBr ...

  3. 百度地图Geolocation的getStatus状态值(百度API获取当前位置[经纬度])

    //关于状态码 //BMAP_STATUS_SUCCESS 检索成功.对应数值"0". //BMAP_STATUS_CITY_LIST 城市列表.对应数值"1" ...

  4. 百度地图 截图java_[Java教程]百度地图API 简单使用

    [Java教程]百度地图API 简单使用 0 2015-08-24 19:00:12 最近项目上需要用到百度地图进行导航,参考百度地图API完成一个例子.API地址:http://developer. ...

  5. 网易云信SDK V3.1.0版本发布啦

    最近天气渐冷,小伙伴们要注意保暖:有女朋友的抱紧女朋友,没女朋友的就抱紧主机. -from 贴心的云小信 10月26日,网易云信SDK V3.1.0版发布,本次版本主要发布功能为:群组聊天室禁言,聊天 ...

  6. android 百度地图简单使用(android Studio )

    最近由于项目需要定位以及地图功能,于是学习了百度地图的简单使用,下面总结下百度地图开发的几个步骤: 1.申请百度账号  --链接地址:https://passport.baidu.com/v2/?lo ...

  7. android百度地图附近的poi,Android百度地图poi范围搜索

    我想大家可能都有过这样的经历:兜里揣着一张银行卡,在街上到处找自动取款机(ATM).在这个场景中,ATM就是的兴趣点,我们想做的事情就是找到离自己较近的一些ATM然后取款,此时我们并不关心附近有哪些超 ...

  8. android 百度地图禁止双击放大缩小,百度地图API 在使用点聚合时,如果放大、缩小或移动地图时,添加的文字标签会消失...

    问题:如题,百度地图API 在使用点聚合时,如果放大.缩小或移动地图时,添加的文字标签(label)会消失. 原因:API代码中的map.removeOverlay(marker),在这句话执行的时候 ...

  9. android h5调用百度地图,h5页面如何调用百度地图获取当前位置(代码)

    本篇文章给大家带来的内容是关于h5页面如何调用百度地图获取当前位置(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在项目中越来越多的用到了手机的GRS定位功能,使用百度地图A ...

最新文章

  1. 给妹子讲python-S01E15详解python迭代环境
  2. Windows Server 2012 Hyper-V 与2008R2 Hyper-v、VMware的对比
  3. 【深度学习】SETR:基于视觉 Transformer 的语义分割模型
  4. 数据源的配置和使用 视频下载
  5. 33条C#、.Net经典面试题目及答案
  6. group by 与 order by
  7. 讲讲你理解的服务治理
  8. 【十七】文件译文:user.properties (用户配置文件)
  9. Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件
  10. mongodb 分组聚合_MongoDB干货总结
  11. Cookies 和 Session的区别
  12. python字符串创建_python独特的字符串创建
  13. Python HackerRank 刷题 Pairs
  14. EnableQ在线问卷调查引擎在学校教学评估中的作用
  15. 什么是IDE?新手用哪个IDE比较好?
  16. 35岁是个坎,为啥到岁数就不想要你了
  17. 下午的一杯清茶,慢了下来
  18. 自建题库,给题库添加密码访问
  19. Android N开发者预览版(第二版)发布
  20. 文章总结:ASPLOS 2013 Architecture I

热门文章

  1. python 判断一个点(坐标)是否在一个多边形内利用射线法
  2. 玩转算法之面试第十章-贪心算法
  3. 平衡二叉树、二叉排序树-数据结构
  4. 如何看待事理图谱版magi--学迹
  5. 特定热点事件监控与分析项目
  6. hadoop碰到的 一个问题
  7. anddroid悬浮窗的手机QQ后台清理不掉的秘密
  8. NHibernate常见错误
  9. CXF 调用C#.net的WebService
  10. 什么是Cookie对象,Session对象,Application对象等问题