Android使用百度地图SDK实现定位与方向传感器匹配
来源:互联网 发布:身份证录入破译软件 编辑:程序博客网 时间:2024/06/12 20:32
前言:有时候,我们活得很累,并非生活过于刻薄,而是我们太容易被外界的氛围所感染,被他人的情绪所左右。行走在人群中,我们总是感觉有无数穿心掠肺的目光,有很多飞短流长的冷言,最终乱了心神,渐渐被缚于自己编织的一团乱麻中。
好消息是五月份终于要过去了······课实在太多了,上的头都大了······
转载请标明出处:http://blog.csdn.net/android_for_james/article/details/51533511
源码我放到了文章的末尾。
先来看看运行效果:
1.普通模式: 2.实时路况: 3.罗盘模式:
4.卫星模式:由于我的位置是旅顺,是敏感城市所以卫星图像百度不予以显示,在其他地方是可以正常显示的
一、申请秘钥
在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并且,该密钥与您创建的过程名称有关。
Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key
二、下载相关SDK:
1.百度地图SDK:
下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
2.百度定位SDK:
下载地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
三、环境配置
第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
第二步:工程配置还需要把jar包集成到自己的工程中,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明,具体配置为下图:
第三步:
(1)在application中添加开发密钥和默认服务
<pre name="code" class="html"><application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
<pre name="code" class="html" style="color: rgb(98, 98, 98); font-size: 14px;"><pre name="code" class="html"> <com.baidu.mapapi.map.MapView android:id="@+id/id_bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
</application>(2)添加所需权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
(3)布局文件中添加地图控件
<com.baidu.mapapi.map.MapView android:id="@+id/id_bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
四、实现结构:
1.MylocationListener负责定位操作
2.MyOrientationListener负责定位图标与方向传感器相结合
五、具体实现:
1.初始化 SDK引用的Context 全局变量:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); }
2.生命周期的匹配:
@Override protected void onStop() { super.onStop(); //停止定位 mBaiduMap.setMyLocationEnabled(false); mlocationClient.stop(); myOrientationListener.stop(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); }3.定位操作实现:
public class MylocationListener implements BDLocationListener { //定位请求回调接口 private boolean isFirstIn=true; //定位请求回调函数,这里面会得到定位信息 @Override public void onReceiveLocation(BDLocation bdLocation) { //BDLocation 回调的百度坐标类,内部封装了如经纬度、半径等属性信息 //MyLocationData 定位数据,定位数据建造器 /* * 可以通过BDLocation配置如下参数 * 1.accuracy 定位精度 * 2.latitude 百度纬度坐标 * 3.longitude 百度经度坐标 * 4.satellitesNum GPS定位时卫星数目 getSatelliteNumber() gps定位结果时,获取gps锁定用的卫星数 * 5.speed GPS定位时速度 getSpeed()获取速度,仅gps定位结果时有速度信息,单位公里/小时,默认值0.0f * 6.direction GPS定位时方向角度 * */ mLatitude= bdLocation.getLatitude(); mLongitude=bdLocation.getLongitude(); MyLocationData data= new MyLocationData.Builder() .direction(mCurrentX)//设定图标方向 .accuracy(bdLocation.getRadius())//getRadius 获取定位精度,默认值0.0f .latitude(mLatitude)//百度纬度坐标 .longitude(mLongitude)//百度经度坐标 .build(); //设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean) mBaiduMap.setMyLocationData(data); //配置定位图层显示方式,三个参数的构造器 /* * 1.定位图层显示模式 * 2.是否允许显示方向信息 * 3.用户自定义定位图标 * * */ MyLocationConfiguration configuration =new MyLocationConfiguration(locationMode,true,mIconLocation); //设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效,参见 setMyLocationEnabled(boolean) mBaiduMap.setMyLocationConfigeration(configuration); //判断是否为第一次定位,是的话需要定位到用户当前位置 if(isFirstIn) { //地理坐标基本数据结构 LatLng latLng=new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); //描述地图状态将要发生的变化,通过当前经纬度来使地图显示到该位置 MapStatusUpdate msu= MapStatusUpdateFactory.newLatLng(latLng); //改变地图状态 mBaiduMap.setMapStatus(msu); isFirstIn=false; Toast.makeText(context, bdLocation.getAddrStr(), Toast.LENGTH_SHORT).show(); } } }4.方向传感器与定位图标方向匹配操作:
public class MyOrientationListener implements SensorEventListener{ private SensorManager mSensorManager; private Sensor mSensor; private Context mContext; private float lastX; private OnOrientationListener mOnOrientationListener; public MyOrientationListener(Context context) { this.mContext=context; } public void start() { mSensorManager= (SensorManager) mContext .getSystemService(Context.SENSOR_SERVICE); if(mSensorManager!= null) { //获得方向传感器 mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } //判断是否有方向传感器 if(mSensor!=null) { //注册监听器 mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_UI); } } public void stop() { mSensorManager.unregisterListener(this); } //方向改变 @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType()==Sensor.TYPE_ORIENTATION) { float x=event.values[SensorManager.DATA_X]; if(Math.abs(x-lastX)>1.0) { if(mOnOrientationListener!=null) { mOnOrientationListener.onOrientationChanged(x); } } lastX=x; } } public void setOnOrientationListener(OnOrientationListener listener) { mOnOrientationListener=listener; } public interface OnOrientationListener { void onOrientationChanged(float x); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }}
如果对你有帮助,那就顶一下~~~
转载请标明出处:http://blog.csdn.net/android_for_james/article/details/51533511
源码下载网址(点开后面链接后在文章末尾有点击下载按钮):点击打开链接
下载备用链接 点击打开链接
如果你喜欢我的文章欢迎关注我的博客:http://blog.csdn.net/android_for_james
1 0
- Android使用百度地图SDK实现定位与方向传感器匹配
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- 百度地图植入android应用系列教程二实现百度地图定位及方向传感器
- 一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)
- hibernate进阶之路(一)
- c++第六次实验
- Java大数类
- Centos7 防火墙开放端口
- Android使用百度地图SDK实现定位与方向传感器匹配
- 数据库1
- python学习的一些感悟
- 欧拉计划(1~3)ps:以后看题一定要认真
- 数据库2
- 欧拉计划 NO05 ps:4题想过,好做,但麻烦,有时间补充,这题也不难!
- linux学习笔记---一些有趣的命令
- c++:参数型别的推导
- 关于set或map的key使用自定义类型的问题