android 百度地图系列之结合方向传感器的地图定位

Android百度地图SDK定位与方向传感器实战 Android系统通过提供统一的传感器管理接口,开发者可以通过它访问设备上的各种传感器,包括加速度计、陀螺仪、磁力计、方向传感器等。的核心职责包括:获取系统中的传感器列表注册与注销传感器监听器获取特定类型的传感器对象控制传感器的运行模式与更新频率获取实例的方式非常简单,通常通过 Context 的 getSystemService 方法:代码逻辑分析:是 Android 提供的标准服务获取方式,用于获取系统级的服务对象。返回值类型为。 阅读详情

因为这是关于百度地图的系列博客,本文章的百度地图定位在上一篇(android 百度地图系列之地图初始化及定位)中已经详细介绍过,就在上篇博客的基础上,添加方向传感器来使定位图标显示自己在地图上的方向。 
首先需要一张方向朝上的定位标志图。(优快云上传图片失败,下次修改) 
注意:一定要方向朝上,要不然方向会有偏差

在自定义定位图标的时候需要bitmapDescriptor,所以需要将bitmapDescriptor获取到

//初始化图标
bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.arrow);
  • 1
  • 2

并在MyLocationListener的onReceiveLocation方法中添加自定义的定位图标显示方式。

//配置定位图层显示方式,使用自己的定位图标
MyLocationConfiguration configuration = new MyLocationConfiguration(LocationMode.NORMAL, true, bitmapDescriptor);
mBaiduMap.setMyLocationConfigeration(configuration);
  • 1
  • 2
  • 3

这样,自定义的图标就显示出来了,现在需要与方向传感器结合来实现带方向的定位图标,并在旋转手机的时候,自动旋转图标。 
现在需要一个传感器的监听,定义一个了类实现SensorEventListener,重写onSensorChanged()和onAccuracyChanged()方法。其中onAccuracyChanged()监听精度改变不需要,只要通过onSensorChanged()监听x轴方向改变就满足需要。 
直接上代码,注释很清楚

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
/**
 * 方向传感器监听
 * @author wangjian
 *
 */
public class MyOrientationListener implements SensorEventListener{
    //传感器管理者
    private SensorManager mSensorManager;
    //上下文
    private Context mContext;
    //传感器
    private Sensor mSensor;

    //方向传感器有三个坐标,现在只关注X
    private float mLastX;
    //构造函数
    public MyOrientationListener(Context context) {
        this.mContext = context;
    }
    //开始监听
    @SuppressWarnings("deprecation")
    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);
    }
    //传感器发生改变时
    @SuppressWarnings("deprecation")
    @Override
    public void onSensorChanged(SensorEvent event) {
        //判断返回的传感器类型是不是方向传感器
        if(event.sensor.getType() == Sensor.TYPE_ORIENTATION){
            //只获取x的值
            float x = event.values[SensorManager.DATA_X];
            //为了防止经常性的更新
            if(Math.abs(x-mLastX)>1.0){
                if(onOrientationListener!=null){
                    onOrientationListener.onOrientationChanged(x);
                }
            }
            mLastX = x;
        }
    }

    //当传感器精度发生改变,当前不用
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    private OnOrientationListener onOrientationListener;

    public void setOnOrientationListener(OnOrientationListener onOrientationListener) {
        this.onOrientationListener = onOrientationListener;
    }

    //回掉方法
    public interface OnOrientationListener{
        void onOrientationChanged(float x);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

开始在定位中实现方向传感器的结合。 
将initMyLoc()添加到onCreate()中。

 private void initMyLoc() {
    //初始化图标
    bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.arrow);
    //方向传感器监听
    myOrientationListener = new MyOrientationListener(this);
    myOrientationListener.setOnOrientationListener(new OnOrientationListener() {
        @Override
        public void onOrientationChanged(float x) {
            //将获取的x轴方向赋值给全局变量
            mLastX = x;
        }
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

修改获取location信息时的配置,添加旋转角度,这样每次定位的时候就能旋转角度了。

//自定义的定位监听
   private class MyLocationListener implements BDLocationListener{
    @Override
    public void onReceiveLocation(BDLocation location) {
        //将获取的location信息给百度map
        MyLocationData data = new MyLocationData.Builder()  
            .accuracy(location.getRadius())  
            // 此处设置开发者获取到的方向信息,顺时针0-360,mLastX就是获取到的方向传感器传来的x轴数值 
            .direction(mLastX)
            .latitude(location.getLatitude())  
            .longitude(location.getLongitude())
            .build();
        mBaiduMap.setMyLocationData(data);
        //更新经纬度
        mLatitude = location.getLatitude();
        mLongitude = location.getLongitude();
        //配置定位图层显示方式,使用自己的定位图标
        //LocationMode定位模式有三种:普通模式,跟随模式,罗盘模式,在这使用普通模式
        MyLocationConfiguration configuration = new MyLocationConfiguration(LocationMode.NORMAL, true, bitmapDescriptor);
        mBaiduMap.setMyLocationConfigeration(configuration);
        if(isFirstLocation){
            //获取经纬度
            LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
            MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
            //mBaiduMap.setMapStatus(status);//直接到中间
            mBaiduMap.animateMapStatus(status);//动画的方式到中间
            isFirstLocation = false;
            showInfo("位置:" + location.getAddrStr());
        }
    }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

最后展示一下: 
ps:csdn上传图片失败。。不知道怎么回事,下回上传一下 
这里写图片描述

深入掌握Android百度地图SDK v3.4.0定位及方向传感器集成 在移动应用中集成地图服务是开发过程中的常见需求。百度地图SDK为开发者提供了丰富的API接口和工具,能够帮助开发者快速实现地图展示、定位、路径规划等服务。本章将介绍如何在Android项目中集成百度地图SDK。BaiduLocationApi是百度地图SDK提供的一个强大的接口,它支持多种定位方式,如GPS、基站和Wi-Fi等,能够满足不同场景下的定位需求。它支持多种坐标系转换,以及提供逆地理编码功能,可以将经纬度信息转换为具体地址信息,极大地方便了开发者获取详细的地理位置信息。 阅读详情

相关推荐

2019百度地图基础显示与方向传感器定位功能实战开发

默认情况下,百度地图会在左下角显示比例尺,右下角显示缩放控件。可通过以下方式控制其可见性:// 隐藏默认缩放按钮// 显示指南针(倾斜或旋转地图时出现)// 控制比例尺位置与可见性baiduMap.scaleBarOffset = Point(10, 800) // 像素偏移量更进一步,可完全自定义UI控件:// 添加自定义按钮text = "+"通过组合原生控件与地图API,实现高度定制化的交互界面。百度地图提供丰富的事件回调接口:Log.d("Map", "用户开始触摸")

weixin_33622085的博客 916

android 定位与传感器,Android使用百度地图SDK实现定位与方向传感器匹配

public class MylocationListener implements BDLocationListener{//定位请求回调接口private boolean isFirstIn=true;//定位请求回调函数,这里面会得到定位信息@Overridepublic void onReceiveLocation(BDLocation bdLocation) {//BDLocation ...

weixin_29796903的博客 405

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

代码为博客实例代码:http://blog.youkuaiyun.com/lmj623565791/article/details/37730469 有问题请博客中留言

android开发百度地图api实现定位图标随手机方向转动

android开发百度地图api实现定位图标随手机方向转动

qq_53162179的博客 2386

百度地图根据方向传感器实现指南针

资源博客地址:https://blog.youkuaiyun.com/lanrenxiaowen/article/details/83410999

2019百度地图基本地图的显示和带方向传感器的定位功能的实现

2019最新百度地图基本地图和带方向传感器的定位功能的实现,不是旧资源,最新开发对应官方最新开发文档

Android Studio3.0对于百度地图SDK的开发(基于方向传感器实现手机朝向显示)

文章目录前言添加传感器类修改MainActivity.java测试优化平滑方向变化新增对象获取上一次定位数据修改initOrientation再次定位,画面中心点不再回到定位点迅速返回定位点添加按钮实现按钮定位点模式切换添加单选框实现功能源码 前言 上午刚说不知道怎么绑定方向传感器,下午就找到教程了…… 主要参考了花海ipa大大的这篇文章 2019-详细Android Studio开发百度地图(3)—百度地图_配合方向感应器的定位功能的实现 之前对于定位的方向,是通过getDirection()来实现的.

LanceEnder的博客 4063

Android百度地图之方向感应和模式更改

本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下 目标效果: 菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图。 1.首先要去百度地图网站 http://lbsyun.baidu.com/ 2.注册账号后,点击开发->Android地图SDK->获取密钥,进入后显示如下页面。 3.创建应用 4.打开eclipse,选择Window->Preferences->Android->Build,获取SHA1 5.提交后回到上一个Android地图SDK页面选择相关下载,再点击自定义下载 6.选择定位功能,基础地图,检索功能,LBS云检索,

Android使用百度地图SDK实现定位与方向传感器匹配

前言:有时候,我们活得很累,并非生活过于刻薄,而是我们太容易被外界的氛围所感染,被他人的情绪所左右。行走在人群中,我们总是感觉有无数穿心掠肺的目光,有很多飞短流长的冷言,最终乱了心神,渐渐被缚于自己编织的一团乱麻中。 好消息是五月份终于要过去了······课实在太多了,上的头都大了······ 先来看看运行效果: 1.普通模式:

James先生的博客 1万+

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。

garlic的博客 312

VS2022 中 std::mutex 静态初始化陷阱:一次诡异崩溃的排查记录

VS2022中使用std::mutex时遇到的静态初始化陷阱问题。该问题源于VS2022 17.4版本为std::mutex添加constexpr支持后,全局静态初始化可能导致系统资源未就绪时锁失效或崩溃。文章分析了问题现象、影响范围,并提供了解决方案。最后给出了排查清单和核心建议

qq_34552942的博客 952

android--百度地图--方向定位+覆盖物显示

Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

程序员的良师益友 1439

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

百度地图定位当前并且加上方向传感器

今天继续分享百度地图的定位到当前的功能 1.AndroidManiFest.xml: 在这边一定要记得注册一个service,不然是跑步起来的。               android:name="com.baidu.location.f"             android:enabled="true"             android:process=":rem

Lenny的专栏 1437

本地大模型5:在pycharm用python调用ollama本地大模型

python调用ollama本地大模型

weixin_74825941的博客 8377

基于matlab的CNN手写数字图像矫正系统

CNN 是一款强大的图像特征抽象和提取工具,常用于图像分类识别,并取得了较为理想的效果。我们通过 MATLAB 可以方便地设计不同结构、不同深度的 CNN 进行图像分类,最后一层一般设置为分类层(ClassificationLayer)进行类别标签的输出。如果我们将最后一层设计为回归层(RegressionLayer),则可以将其应用于对连续数据的预测,这对于曲线拟合、预测分析都有重要的意义。% 自定义 CNN 回归网络结构layers = [% 输入% 卷积% 池化% 池化% 卷积。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 676

浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)

今天我们来谈下百度地图的定位功能,在此之前我已经将百度地图的基本地图大概说了下,其实百度地图的基本功能还有很多的内容。感兴趣的可以到百度地图的开发者的官网看看。今天就开始来讲下百度地图中的定位功能。 今天所讲的百度地图所涉及的内容主要有:基本定位的实现,自定义定位图标,结合方向传感器定位,选择定位中的几种模式(罗盘模式,普通模式,跟随模式)。 一、基本定位的实现: 所谓定位无非就是获取到一个

Mikyou的专栏 1万+

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。

小彭的博客 963

2019-详细Android Studio开发百度地图(3)—百度地图_配合方向感应器的定位功能的实现

百度地图_定位功能的实现和方向感应器的使用 参考官方文档(定位)步骤; 开发包中在一开始已经包含基本定位功能,略过; 配置AndroidManifest.xml文件: <!-- 这个权限用于进行网络定位 --> <uses-permission andr

花海ipa的博客 8480

uniapp:安卓苹果APP判断是否授权开启手机位置服务+弹框引导跳转到用户手机设置位置服务开启页面,uniApp app判断是否授权位置信息权限如果位置是关闭状态则提示用户(跳转各机型位置设置页面)

uniapp APP判断是否开启位置信息服务&&判断是否授权位置信息权限,uniappapp定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面,uniapp APP端 定位未授权 去手机设置里开启定位,uniapp提示用户开启定位,跳转到开启定位页面,uniapp获取当前位置及检测授权状态,uniapp中获取位置信息处理,uni-app实现定位功能_uniapp获取定位位置信息,uniapp中app是否开启定位,app获取地理位置,uniapp打开位置权限设置页面IOS,用户并没有开启微信信息服务或者没

✅ 精选推荐文章 4343

【Metashape精品教程4】软件设置

介绍Metashape软件设置

penglu366366的博客 2950

Android 百度地图 SDK v3.0.0 (一)

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SDK,当前的版本:Android SDK v3.0.0 。 虽然百度地图网上相关代码比较多,大多可能都是比较旧的版本,且百度地图API的改动感觉也比较大,所以再此跟大家分享一下一天的劳动成功。 下面

Hongyang 7万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

百度地图实现定位图标随手机方向变化而变化,即运用方向传感器

百度地图实现定位图标随手机方向变化而变化,即运用方向传感器 前言: 在安卓《第一行代码》里面关于百度地图sdk的学习中,发现书上的代码只实现到把自己(即定位图标)显示在地图上这一步,而图标的指向是固定的不会随手机方向改变而改变,用起来挺别扭的,故我自己查文档实现了这一功能。 具体实现:一、在书上代码的基础上,自己写一个MyOrientationListener用于监听方向传感器。 public class MyOrientationListener implements SensorEventListen

weixin_43200634的博客 2784

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: android 百度地图自定义圆,更改默认图标等常用方法
下一篇: Java集合通过包装类存储primitive类型的数据
RuiBo_Qiu
博客等级 码龄11年 158粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值