Android版本百度地图开发(四)——定位

Android百度地图开发定位和路线导航 在写之前要先加入百度地图sdk的jar包从百度地图开发者官网上就能下载 百度地图sdk下载 而其中用到的一些与定位和路线规划有关的包可以在事例中查看导入 首先是xml的布局文件,其中editText的background是采用的自定义的样式,而在edittext前面的小点是用来美化界面的,可以直接删除 <?xml version="1.0" encoding=&amp 阅读详情

本来这里应该继续讲述百度地图相关的知识,但继续向前会遇到定位相关的内容,所以我们先来讲解如何处理定位的内容。


1 导入库文件

  1. 我们去http://developer.baidu.com/map/geosdk-android-download.htm找到相关下载内容,找到4.0版本SDK并下载下来;
  2. 解压,将locaSDK_4.0.jar拷贝到工程的/libs目录;
  3. 将liblocSDK4.so拷贝到工程的/libs/armeabi目录;

2 设置AndroidManifest.xml文件

  1. 在Application标签中声明service:
            <service
                android:name="com.baidu.location.f"
                android:enabled="true"
                android:process=":remote" >
            </service>

  2. 声明使用权限:
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.READ_PHONE_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
        </uses-permission>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
        </uses-permission>
        <uses-permission android:name="android.permission.READ_LOGS" >
        </uses-permission>

3 开始定位

  1. 在Activity中import相关类,添加成员变量:
    private LocationClient locationClient = null;
    	private MyLocationListener listener = new MyLocationListener();
  2. 在onCreate中启动定位服务:
    // 构造函数中的Context参数需要指定对整个进程有效的Context,所以使用Application的Context
    		locationClient = new LocationClient(getApplicationContext());
    		locationClient.setAK(KEY);
    		locationClient.registerLocationListener(listener);
    		// 设置定位参数
    		LocationClientOption option = new LocationClientOption();
    		option.setOpenGps(true);
    		option.setAddrType("all");// 返回的定位结果包含地址信息
    		option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
    		option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
    		option.disableCache(true);// 禁止启用缓存定位
    		option.setPoiNumber(5); // 最多返回POI个数
    		option.setPoiDistance(1000); // poi查询距离
    		option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息
    		locationClient.setLocOption(option);
    		// 启动定位服务
    		locationClient.start();

  3. 异步定位回调处理:
    public class MyLocationListener implements BDLocationListener {
    
    	@Override
    	public void onReceiveLocation(BDLocation location) {
    		if (location == null)
    			return;
    		StringBuffer sb = new StringBuffer(256);
    		sb.append("time : ");
    		// 时间
    		sb.append(location.getTime());
    		sb.append("\nLoc Type : ");
    		// 定位类型:
    		// 61 : GPS定位结果
    		// 62 : 扫描整合定位依据失败。此时定位结果无效。
    		// 63 : 网络异常,没有成功向服务器发起请求。此时定位结果无效。
    		// 65 : 定位缓存的结果。
    		// 66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果
    		// 67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果
    		// 68 : 网络连接失败时,查找本地离线定位时对应的返回结果
    		// 161: 表示网络定位结果
    		// 162~167: 服务端定位失败。
    		sb.append(location.getLocType());
    		sb.append("\nlatitude : ");
    		// 纬度
    		sb.append(location.getLatitude());
    		sb.append("\nlontitude : ");
    		// 经度
    		sb.append(location.getLongitude());
    		sb.append("\nradius : ");
    		// 半径
    		sb.append(location.getRadius());
    		if (location.getLocType() == BDLocation.TypeGpsLocation) {
    			sb.append("\nspeed : ");
    			sb.append(location.getSpeed());
    			sb.append("\nsatellite : ");
    			sb.append(location.getSatelliteNumber());
    		} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
    			sb.append("\naddr : ");
    			// 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。
    			sb.append(location.getAddrStr());
    			// 2.6以上版本SDK支持单独获取省份城市区县信息
    			sb.append("\n省份 : " + location.getProvince() + "; 城市:" + location.getCity() + "; 区县:" + location.getDistrict());
    		}
    
    		System.out.println(sb.toString());
    	}
    
    	@Override
    	public void onReceivePoi(BDLocation poiLocation) {
    		if (poiLocation == null) {
    			return;
    		}
    		StringBuffer sb = new StringBuffer(256);
    		sb.append("Poi time : ");
    		sb.append(poiLocation.getTime());
    		sb.append("\nerror code : ");
    		sb.append(poiLocation.getLocType());
    		sb.append("\nlatitude : ");
    		sb.append(poiLocation.getLatitude());
    		sb.append("\nlontitude : ");
    		sb.append(poiLocation.getLongitude());
    		sb.append("\nradius : ");
    		sb.append(poiLocation.getRadius());
    		if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
    			sb.append("\naddr : ");
    			sb.append(poiLocation.getAddrStr());
    		}
    		if (poiLocation.hasPoi()) {
    			sb.append("\nPoi:");
    			sb.append(poiLocation.getPoi());
    		} else {
    			sb.append("noPoi information");
    		}
    		System.out.println(sb.toString());
    	}
    
    }
    上面的onReceivePoi只有在调用getPoi方法后才可能产生异步回调。


4 设置位置提醒

对于某些应用(例如导航),需要在到达某位置之后振动提醒用户,可设置位置提醒。
相关代码:
		// 位置提醒相关代码
		notifyListener = new MyNotifyListener();
		// 4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
		notifyListener.SetNotifyLocation(31.209294,121.472471,3000,"gps");
		// 注册位置提醒监听事件后,可以通过SetNotifyLocation 来修改位置提醒设置,修改后立刻生效。
		// 位置提醒最多提醒3次,3次过后将不再提醒。 假如需要再次提醒,或者要修改提醒点坐标,都可通过函数SetNotifyLocation()来实现。
		locationClient.registerNotify(notifyListener);
		// 取消位置提醒
		// locationClient.removeNotifyEvent(notifyListener);

用于提醒的Listener:
public class MyNotifyListener extends BDNotifyListener {
	/**
	 * mlocation表示当前位置,distance是当前坐标中心点与设定位置提醒的坐标点之间的距离值。
	 */
	@Override
	public void onNotify(BDLocation mlocation, float distance) {
		super.onNotify(mlocation, distance);
		System.out.println("已经到设定位置附近。");
	}

}

5 地理围栏

地理围栏服务目前处于Beta阶段,主要用于提供比Notify更低功耗的提醒,使用上和Notify差不多,暂不做介绍。

6 注意事项

  • 定位SDK必须注册GPS和网络的使用权限。
  • 使用定位SDK请保证网络连接通畅(GPS定位方式不需要连网)。
  • 我们强烈建议您设置自己的prodName,并保管好,这样方便我们为您提供更好的定位服务。
  • 若需要返回的定位结果里包含地址信息,请保证网络连接。
  • 定位SDK可以返回bd09、bd09ll、gcj02三种类型坐标,若需要将定位点的位置通过百度Android地图 SDK进行地图展示,请返回bd09ll,将无偏差的叠加在百度地图上。
  • 有的移动设备锁屏后为了省电会自动关闭网络连接,此时网络定位模式的定位失效。此外,锁屏后移动设备若进入cpu休眠,定时定位功能也失效。若您需要实现在cpu休眠状态仍需定时定位,可以用alarmManager 实现1个cpu可叫醒的timer,定时请求定位。
  • 使用SDK4.0需要设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。


Android 百度地图定位 Android 百度地图定位一.目标二.结果展示三.定位流程1.查看android studio 配置2.注册开发者账号,开发密钥申请3.布局与功能的简单实现四.实现自身定位1.布局2.核心功能五.仓库 一.目标 使用百度地图显示当前定位,以及位置的经纬度 二.结果展示 Android studio连接手机后运行的结果图 三.定位流程 1.查看android studio 配置 找到Android Studio所用的JDK的目录,然后需要找到keystore的路径 keytool -list -v -k 阅读详情

相关推荐

Android项目通过百度地图开发文档,实现显示地图和定位功能

本次作业基于上次Android项目实现类微信界面后续recyclerview实现点击跳转

m0_50570109的博客 2667

百度定位SDK使用V4.0

前言:最近在做一个应用,要用到LBS定位,本想自己写,可技术还是不到位,而且时间也不多了,还是以先实现为主吧,然后就研究百度的LBS定位,谷歌的也有LBS定位服务,但总感觉谷歌大神被赶到香港以后,就一直不稳定,不知道LBS怎么样,估计也不行,所以直接就用了百度定位SDK,但百度的定位SDK每日的最大访问量为10W,所以软件用户量大了的话,还是自己写定位代码吧,像我这样的前期用用也还无所谓,毕竟前期

DarrenYan 596

基于百度地图API的安卓定位软件开发实战

随着移动互联网的快速发展,基于位置的服务(LBS)已成为各类应用的核心功能之一。安卓系统提供了强大的定位能力,结合百度地图API,开发者可以快速构建具备高精度定位、地图展示和路径规划等功能的应用程序。本章将从安卓定位的基本概念入手,介绍其在实际开发中的应用场景,并逐步引导读者完成百度地图API的账号申请、密钥获取及SDK集成流程,为后续章节的深入开发打下坚实基础。

weixin_33245447的博客 1095

android 百度定位 封装,百度定位SDK使用V4.0

前言:最近在做一个应用,要用到LBS定位,本想自己写,可技术还是不到位,而且时间也不多了,还是以先实现为主吧,然后就研究百度的LBS定位,谷歌的也有LBS定位服务,但总感觉谷歌大神被赶到香港以后,就一直不稳定,不知道LBS怎么样,估计也不行,所以直接就用了百度定位SDK,但百度的定位SDK每日的最大访问量为10W,所以软件用户量大了的话,还是自己写定位代码吧,像我这样的前期用用也还无所谓,毕竟前期...

weixin_33516557的博客 366

Android开发之百度地图定位

Android开发之百度地图定位

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

实训第三周(1)

本周

weixin_37821599的博客 323

OpenWRT系统启动流程全解析:从procd到ubus的完整链路(附源码分析)

本文深入解析了OpenWRT系统从内核移交控制权到用户空间服务就绪的完整启动链路。核心聚焦于进程管理器procd与通信总线ubus的协同工作机制,通过源码分析揭示了状态机转换、服务注册与事件分发的内在逻辑,为系统定制、启动优化与故障调试提供了清晰指南。

weixin_28335283的博客 532

安卓百度定位SDK做终端定位获取经纬度--------------------安卓移动开发第三步

在前面的一篇中我们看到了关于GPS开启和关闭

IT-cuiyongzhi 1092

ThunderScope开源示波器

4CH,1GSa/S 开源示波器。前端很简洁,BUF802+LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。设计日志:https://hackaday.io/project/180090-thunderscope开源地址:https://github.com/EEVengers/ThunderScope。

leida_wt的博客 8191

火车头采集器超级详细图文使用指导(面向新手)

火车采集器·超级详细使用指导

DE的个人原创笔记 1万+

百度地图调用 keytool 错误:java.lang.Exception: 密钥库文件不存在、getLocType 167(4.9E-324)错误

百度地图调用中遇到的坑1. keytool 错误:java.lang.Exception: 密钥库文件不存在2.getLocType:167 错误3.getAddress 为 null4.定位成功(经纬度获取正确)地图却没有显示正确的地址等问题 使用as学习百度地图调用中,我遇到了keytool 错误:java.lang.Exception: 密钥库文件不存在、getLocType 167错误、getAddress 为null 、定位成功(经纬度获取正确)地图却没有显示正确的地址等问题,下面介绍本人的解决办

keep_up_day_day的博客 2158

工业异常检测评价指标(I-AUROC、PRO等)

模型评价指标:TPR、FPR、Recall、ROC、AUC、AUROC、IoU、PRO、AUPRO等

qq_1532145264的博客 7434

Android 百度地图SDK 自动定位、标记定位

先看效果图,如果不是你想要的,也就不浪费你时间了,这样对大家都好。 如果是你满意的那样,我们就可以开始写了,首先创建一个名为MapDemo的项目。 打开AndroidManifest.xml,复制你的包名 然后进入百度地图开放平台,没有注册的小伙伴先注册,已注册的就直接登录,登录进去之后找到控制台→我的应用→创建应用 点击之后进入,填写相关资料 输入了应用名称、选择了应用类型和启用的服务,输入了包名。还差开发版和发布版的SHA1了 ① 获取开发版SHA1 鼠标点击右侧边栏的Gradle→ app→Ta

晨曦 1万+

Qt视频播放器项目(打开文件,视频的播放与停止,进度条与视频进度绑定,调整音量,设置按钮图标,将槽函数与按钮绑定等功能)完整代码地址在末尾

【代码】Qt视频播放器项目。

分享计算机视觉,C++,网络摄像头研发,音视频开发,嵌入式等知识。 756

YOLOv5 自定义模型 Android 部署完整指南

本文详细介绍了将YOLOv5模型部署到Android设备的完整流程,包含三个核心部分:首先验证官方模型测试,确保基础环境配置正确;随后进行模型转换,从PyTorch导出ONNX格式并优化,再转换为NCNN格式;最后在Android项目中集成自定义模型,包括文件替换、参数修改和代码适配。教程基于YOLOv5 6.1版本,使用NCNN框架进行移动端推理,涵盖了常见问题解决方案和关键配置要点,为开发者提供了从训练到部署的完整技术路线。

FJN110的博客 592

Android Studio 开发(三)--百度地图定位APP

Android Studio 开发(三)–百度地图定位APP 本次Github代码仓库 --crcr1013/MyWechat 文章目录Android Studio 开发(三)--百度地图定位APP一、成果要求二、关键步骤1、准备工作1.1环境准备 一、成果要求 根据官方文档,开发百度地图定位APP,显示出当前位置坐标 二、关键步骤 1、准备工作 1.1环境准备 ...

vegetable1013的博客 6435

YOLO 线性小目标涨点|3890 张输电导线散股 VOC+YOLO 单类别数据集实战,无人机电力缺陷巡检全流程落地

架空输电导线是电网能量传输核心载体,长期受风力摆动、雷击、腐蚀、外力撞击作用,外层铝股极易出现断裂散股故障。导线散股初期仅少量铝丝开裂,肉眼与无人机远距离航拍下属于细长微弱线性小目标;若未及时发现,散股会持续扩张,引发导线过热、断线、大面积停电重大电力安全事故。传统人工巡检存在多重行业痛点:山区、跨江河线路人员无法攀爬登杆,高空作业人身坠落风险极高;无人机单次航拍产出数千张高清图片,人工逐帧筛查微小散股耗时 3-5 天,阴天、逆光、植被遮挡场景漏检率超 45;

lin_xiu的博客 52

安卓开发——在应用中简单调用Android百度地图API SDK

需求展示 利用百度地图API定位到当前所在位置,并显示所在的经纬度和地址信息。 效果展示: 申请百度地图API密钥 首先参考百度地图官方文档申请和注册密钥AK:androidsdk | 百度地图API SDK 在此获得包名: 输入申请到的SHA1码: 如何获得SHA1码呢? ①首先找到SDK安装目录,找到.android,继续找到debug.keystore,生成绝对路径,我这里是D:\androidsdk\.android\debug.keystore...

weixin_45862056的博客 9625

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android开发之百度地图定位打卡

Android开发之百度地图定位打卡

不服输的小乌龟 3640

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android Studio开发(五)使用百度地图API实现实时定位

Android Studio开发(五)使用百度地图API实现实时定位Android Studio开发(五)使用百度地图API实现实时定位一、任务需求二、安卓基于位置的服务(Location Based Service, LBS)1. LBS定义2. 三种常见的定位模式2.1 GPS定位2.2 Wi-Fi定位2.3 基站定位3.3 三种定位方式总结三、使用百度地图API进行简单定位1. 获取SDK2. 配置百度地图API3. 编码阶段四、实现效果 Android S

Louloo的博客 5451

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android studio 百度地图开发(2)地图定位

Android studio 百度地图开发(2)地图定位

生活没有if-else 1万+

安卓实现百度地图定位

参考网址:Android地图SDK | 百度地图API SDK (baidu.com) 一.获取SHA1 Android Studio场景使用keytool 1.进入控制台(以Mac为例,Windows则进入cmd控制台,同样执行下述命令),执行”cd .android”定位到”.android”文件夹下。 2.继续在控制台输入命令: 调试版本使用指令:keytool -list -v -keystore debug.keystore 发布版本请使用指令:keytool -list -v -key

nulifendouwym的博客 3308

百度地图SDK Android版开发 3 显示定位

本文主要介绍百度地图显示定位相关的功能和接口,以及使用方法。获取定位数据。将定位数据在地图中显示。本文先介绍定位数据包括哪些内容,如何在地图中显示定位,最后简单介绍下如何获取定位数据。百度地图SDK将定位和基础地图功能拆分,若要实现定位的显示,应确保开发包中包含基本定位功能,并通过定位服务获取定位,并将其传给MapView。

程序喵D的博客 1822
上一篇: Android版本百度地图开发(三)——路线规划
下一篇: Android版本百度地图开发(五)——覆盖物
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值