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方向的角度設置即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Remove Assignments to Parameters(移除对参数的赋值)

对入参进行赋值 int discount(int inputVal, int quantity, int yearToDate) {if (inputVal > 50) {inputVal - 2;} } 重构:用一个临时变量取代该参数 int discount(int inputVal, int quantity, int yearToDate) {int result inputVal;if (inputVal > 50…

房地产信息

今天随便在网上看了一下长沙的房产,觉得有几个小区,还比较适合。 枫林绿洲 http://house.csonline.com.cn/lp/displp.asp?id39 西子园 http://house.csonline.com.cn/lp/displp.asp?id42 转载于:https://www.cnblogs.com/jacklaw/archive/2005/02/17/…

Replace Method with Method Object(以函数对象取代函数)

在一个大型函数中,由于局部变量的使用导致无法采用Extract Method class Order...double price() {double primaryBasePrice;double secondaryBasePrice;double teriaryBasePrice;// long computation.....} } 重构:将这个函数放进一个单独对象中&…

强烈推荐 MicroSoft Office OneNote

微软推出了一款电子记事本软件,MicroSoft Office OneNote ,强烈推荐之! 平时工作中,一般大家都会记笔记,好记性不如烂笔头嘛,但是大家都还不愿意拿笔记录在纸上,特别是一些比较重要的资料&…

2018-2020年中国服务机器人行业深度研究报告

来源:机器人大讲堂概要:目前世界上至少有48个国家在发展机器人,其中25个国家已涉足服务机器人开发。一、报告编写背景和特点北京立德融创智能机器人技术研究院(简称“立德研究院”)通过对各机器人项目的实施以及自身发…

vscode android入门,vscode Android调试

.vscode 文件夹中添加launch.json文件launch.json内容:{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configuratio…

.NET的动态语言

动态语言目前很多人开始关注了,尤其Python与Ruby是主要的关注目标,学习一门.Net下动态语言,应该是非常有帮助的,关于Python就不多说了,小白在他的Blog有一些对Ruby的介绍。目前已知的这两种动态语言的列表Python …

Substitute Algorithm(替换算法)

把某个算法替换成另一个更清晰的算法 public String foundPerson(String[] people) {for(int i0; i<people.length; i) {if (people[i].equals("Don")) {return "Don";}if (people[i].equals("John")) {return "John";}if (people…

密歇根大学联合谷歌大脑提出,通过「推断语义布局」实现「文本到图像合成」

原文来源&#xff1a;arXiv作者&#xff1a;Seunghoon Hong、Dingdong Yang、Jongwook Choi、Honglak Lee「雷克世界」编译&#xff1a;嗯~阿童木呀我们通过推断语义布局&#xff08;semantic layout&#xff09;提出了一种新的文本到图像合成&#xff08;text-to-image synthe…

华为5g汽车鸿蒙,网传华为携手极狐造车新图片,搭载5G天线+鸿蒙OS!

【太平洋汽车网 石家庄车市点评频道】(4月6日联合官宣海报)4月7日&#xff0c;继此前华为和极狐联合官宣“上海见”之后&#xff0c;网上再次流传第二波海报&#xff0c;对比第一天的“初次见面”&#xff0c;这一次的内容无疑更加“王炸”。除了文字信息的“自动驾驶新标杆”&…

智能工厂4.0:数字世界和物理世界的融合【附下载】

来源&#xff1a;专知概要&#xff1a;自动化与控制发展至今&#xff0c;智能工厂逐渐获得关注&#xff0c;并成为制造企业追求的目标。自动化与控制发展至今&#xff0c;智能工厂逐渐获得关注&#xff0c;并成为制造企业追求的目标。何为智能工厂&#xff1f;它应该是一个柔性…

html 自动排序代码,SEO中常用HTML代码大全,及权重排序

做SEO必须要懂HTML&#xff0c;说的是一点都没错&#xff0c;不过其实是不需要全部都懂&#xff0c;最重点的你懂了会用&#xff0c;基本上都是事半功倍了。可以这么说一个不懂代码的优化人员不算是一个合格的好优化。下面就总结一下做优化&#xff0c;必须要懂得几个最重要的h…

Hide Delegate(隐藏“委托关系”)

通过一个委托类来调用另一个对象 重构&#xff1a;在服务类上建立客户所需的所有函数&#xff0c;用以隐藏委托关系。

中科院自动化所介绍深度强化学习进展:从AlphaGo到AlphaGo Zero

来源&#xff1a;德先生概要&#xff1a;2016年初&#xff0c;AlphaGo战胜李世石成为人工智能的里程碑事件。其核心技术深度强化学习受到人们的广泛关注和研究&#xff0c;取得了丰硕的理论和应用成果。深度强化学习进展: 从AlphaGo到AlphaGo Zero唐振韬, 邵坤, 赵冬斌 , 朱圆…

Introduce Foreign Method(引入外加函数)

需要为提供服务的类增加一个函数&#xff0c;但你无法修改这个类 Date newStart new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() 1); 重构&#xff1a;在客户类中建立一个函数 Date newStart nextDay(previousEnd); private static Dat…

html select 文字居中显示图片,html原生select改造箭头及文字左右居中的一种办法...

使用过原生select做网页开发的人&#xff0c;一定会对select的两个问题痛心疾首&#xff0c;一是箭头没办法使用css改造&#xff0c;二是显示文字没办法左右居中。首先&#xff0c;如果你有足够时间的话&#xff0c;请改用jquerymobile。jquerymobile提供了移动端非常强大的各种…

一起来讨论web2.0吧

因为想要在经典上发&#xff0c;所以起了这么个名字。最近今天接触了很多这方面的东西&#xff0c;感觉就是关于新思潮的一切都扑面而来。感觉web上是个人物就在吵2.0&#xff0c;我是个初学者&#xff0c;谈一谈今上午的感受。一直以来&#xff0c;我虽然是做web编程的&#x…

2018年,这15个领域将会呈现指数级变化

来源&#xff1a;36氪概要&#xff1a;很多趋势将会在2018年继续下去&#xff0c;尤其是呈现指数级增长的多技术融合。很多趋势将会在2018年继续下去&#xff0c;尤其是呈现指数级增长的多技术融合。气候变化依然是一个最紧迫的问题&#xff0c;尤其当我们通过碳预算来解决问题…

中文WAP浏览器WapDisplayer V1.5发布

中文WAP浏览器WapDisplayer V1.5发布 中国被爱可以在线于2005-9-26发布了中文WAP浏览器WapDisplayer V1.5&#xff0c;欢迎大家下载使用。程序简介&#xff1a;WapDisplayer V1.5是一款利用M3Gate控件开发的中文WAP浏览器&#xff0c;除了保留原英文版M3Gate Version 1.2 beta的…

《自然》杂志:超导突触处理信息能力超人脑

来源&#xff1a;科技日报概要&#xff1a;据英国《自然》杂志网站近日报道&#xff0c;美国科学家研制出一款模拟人脑神经中枢处理过程的超导突触&#xff0c;其信息处理速度比人脑更快&#xff0c;而且更高效。据英国《自然》杂志网站近日报道&#xff0c;美国科学家研制出一…