android 百度地图3.0定位,Android 百度地圖 SDK v3.0.0 (二) 定位與結合方向傳感器...
新功能添加:
第一,定位功能;第二,與方向傳感器結合,通過旋轉手機進行道路的方向確認。
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 (二) 定位與結合方向傳感器...相关推荐
- android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...
目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...
- php 嵌入手机百度地图,C# 程序中嵌入百度地图
本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点:WebBr ...
- 百度地图Geolocation的getStatus状态值(百度API获取当前位置[经纬度])
//关于状态码 //BMAP_STATUS_SUCCESS 检索成功.对应数值"0". //BMAP_STATUS_CITY_LIST 城市列表.对应数值"1" ...
- 百度地图 截图java_[Java教程]百度地图API 简单使用
[Java教程]百度地图API 简单使用 0 2015-08-24 19:00:12 最近项目上需要用到百度地图进行导航,参考百度地图API完成一个例子.API地址:http://developer. ...
- 网易云信SDK V3.1.0版本发布啦
最近天气渐冷,小伙伴们要注意保暖:有女朋友的抱紧女朋友,没女朋友的就抱紧主机. -from 贴心的云小信 10月26日,网易云信SDK V3.1.0版发布,本次版本主要发布功能为:群组聊天室禁言,聊天 ...
- android 百度地图简单使用(android Studio )
最近由于项目需要定位以及地图功能,于是学习了百度地图的简单使用,下面总结下百度地图开发的几个步骤: 1.申请百度账号 --链接地址:https://passport.baidu.com/v2/?lo ...
- android百度地图附近的poi,Android百度地图poi范围搜索
我想大家可能都有过这样的经历:兜里揣着一张银行卡,在街上到处找自动取款机(ATM).在这个场景中,ATM就是的兴趣点,我们想做的事情就是找到离自己较近的一些ATM然后取款,此时我们并不关心附近有哪些超 ...
- android 百度地图禁止双击放大缩小,百度地图API 在使用点聚合时,如果放大、缩小或移动地图时,添加的文字标签会消失...
问题:如题,百度地图API 在使用点聚合时,如果放大.缩小或移动地图时,添加的文字标签(label)会消失. 原因:API代码中的map.removeOverlay(marker),在这句话执行的时候 ...
- android h5调用百度地图,h5页面如何调用百度地图获取当前位置(代码)
本篇文章给大家带来的内容是关于h5页面如何调用百度地图获取当前位置(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在项目中越来越多的用到了手机的GRS定位功能,使用百度地图A ...
最新文章
- 给妹子讲python-S01E15详解python迭代环境
- Windows Server 2012 Hyper-V 与2008R2 Hyper-v、VMware的对比
- 【深度学习】SETR:基于视觉 Transformer 的语义分割模型
- 数据源的配置和使用 视频下载
- 33条C#、.Net经典面试题目及答案
- group by 与 order by
- 讲讲你理解的服务治理
- 【十七】文件译文:user.properties (用户配置文件)
- Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件
- mongodb 分组聚合_MongoDB干货总结
- Cookies 和 Session的区别
- python字符串创建_python独特的字符串创建
- Python HackerRank 刷题 Pairs
- EnableQ在线问卷调查引擎在学校教学评估中的作用
- 什么是IDE?新手用哪个IDE比较好?
- 35岁是个坎,为啥到岁数就不想要你了
- 下午的一杯清茶,慢了下来
- 自建题库,给题库添加密码访问
- Android N开发者预览版(第二版)发布
- 文章总结:ASPLOS 2013 Architecture I