Android 百度地图 SDK v3(2)

定位也是比较耗电的,所以我们在onStart中开启定位,在onStop中关闭定位~~这样应用最小化时就不会一直在哪GPS请求定位了,用户要是看你app一直在那定位,估计马上就被卸载了~

@Override

protected void onStart()

{

// 开启图层定位

mBaiduMap.setMyLocationEnabled(true);

if (!mLocationClient.isStarted())

{

mLocationClient.start();

}

// 开启方向传感器

myOrientationListener.start();

super.onStart();

}

@Override

protected void onStop()

{

// 关闭图层定位

mBaiduMap.setMyLocationEnabled(false);

mLocationClient.stop();

// 关闭方向传感器

myOrientationListener.stop();

super.onStop();

}

上面的传感器的代码,一会就会介绍~

记得在AndroidManifest.xml配一个service

<service

android:name=“com.baidu.location.f”

android:enabled=“true”

android:process=“:remote” >

现在基本的定位功能已经实现了~不过我们还需要添加点击定位按钮和方向传感器

2、我的位置

点击我的位置菜单会调用center2myLoc方法。

case R.id.id_menu_map_myLoc:

center2myLoc();

break;

/**

  • 地图移动到我的位置,此处可以重新发定位请求,然后定位;

  • 直接拿最近一次经纬度,如果长时间没有定位成功,可能会显示效果不好

*/

private void center2myLoc()

{

LatLng ll = new LatLng(mCurrentLantitude, mCurrentLongitude);

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

mBaiduMap.animateMapStatus(u);

}

很简单,我们在定位的监听器中已经保存了最近一次的定位经纬度,所以只需要点击时,把地图移动到相应的位置即可。

3、集成方向传感器

首先是封装的方向传感器的类MyOrientationListener.java

package com.zhy.zhy_baidu_ditu_demo00;

import android.content.Context;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

public class MyOrientationListener implements SensorEventListener

{

private Context context;

private SensorManager sensorManager;

private Sensor sensor;

private float lastX ;

private OnOrientationListener onOrientationListener ;

public MyOrientationListener(Context context)

{

this.context = context;

}

// 开始

public void start()

{

// 获得传感器管理器

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);

}

}

// 停止检测

public void stop()

{

sensorManager.unregisterListener(this);

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy)

{

}

@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 )

{

onOrientationListener.onOrientationChanged(x);

}

// Log.e(“DATA_X”, x+“”);

lastX = x ;

}

}

public void setOnOrientationListener(OnOrientationListener onOrientationListener)

{

this.onOrientationListener = onOrientationListener ;

}

public interface OnOrientationListener

{

void onOrientationChanged(float x);

}

}

在onCreate中初始化方向传感器

/**

  • 初始化方向传感器

*/

private void initOritationListener()

{

myOrientationListener = new MyOrientationListener(

getApplicationContext());

myOrientationListener

.setOnOrientationListener(new OnOrientationListener()

{

@Override

public void onOrientationChanged(float x)

{

mXDirection = (int) x;

// 构造定位数据

MyLocationData locData = new MyLocationData.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 = new MyLocationConfigeration(

mCurrentMode, true, mCurrentMarker);

mBaiduMap.setMyLocationConfigeration(config);

}

});

}

最后在onStart和onStop中分别开启和关闭方向传感器。

对于旋转手机确定方向,实际上利用了

new MyLocationData.Builder()

//此处设置开发者获取到的方向信息,顺时针0-360 .direction(mXDirection)

只需要把x方向的角度设置即可~是不是很简单~

好了,介绍完毕了,关闭地图样式的切换,以及跟随、罗盘等模式的切换就不介绍了,大家自己看下源码~~

源码点击下载

注:开发者key需要换成自己申请的,不清楚申请的请看第一篇博客的。

百度地图相关博客视频版本已经上线:Android中百度地图的使用期待您的支持。

博主部分视频已经上线,如果你不喜欢枯燥的文本,请猛戳(初录,期待您的支持):

1、Android 自定义控件实战 电商活动中的刮刮卡

2、Android自定义控件实战  打造Android流式布局和热门标签

3、Android智能机器人“小慕”的实现

4、高仿QQ5.0侧滑

5、高仿微信5.2.1主界面及消息提醒

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-NgRdiWHL-1715353586958)]

[外链图片转存中…(img-LMojDUUC-1715353586960)]

[外链图片转存中…(img-inrXK3lh-1715353586962)]

[外链图片转存中…(img-hbu7k4sY-1715353586963)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值