地图的相关操作步骤根据百度地图的操作文档进行,就可以在项目中进行百度地图的访问(地图SDK地址:http://lbsyun.baidu.com/index.php?title=androidsdk),
总结一下地图的几个操作步骤:
1.注册和获取秘钥(百度地图 SDK开发密钥的申请地址为:http://lbsyun.baidu.com/apiconsole/key)
2.获取安全码
3.copy相关开发包
4.实现地图功能,以及相关配置信息
定位功能参考相关文档可以进行功能实现

地图权限分为两块,一块是网络访问权限,一块是GPS定位
1、定位问题:
定位需要在项目中添加添加定位权限,定位参考demo地址:http://lbsyun.baidu.com/index.php?title=android-locsdk

     <!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

由于目前的android版本升级,6.0以上需要动态申请权限,所以在某些手机上面必须要动态申请权限

  XXPermissions.with(getActivity())//请求获取拍照权限.permission(Permission.CAMERA).request(new OnPermission() {@Overridepublic void hasPermission(List<String> granted, boolean isAll) {if (isAll) {//扫码Intent intent = new Intent(getActivity(), CaptureActivity.class);intent.putExtra("fragmentName", "AbnormalFragment");startActivityForResult(intent, Contacts.REQUESTCODE_ABNORMAL_FRAGMENT_CAPTURE);} else {Toast.makeText(getActivity(), "获取权限成功,部分权限未正常授予", Toast.LENGTH_SHORT).show();}}@Overridepublic void noPermission(List<String> denied, boolean quick) {if (quick) {Toast.makeText(getActivity(), "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show();//如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.gotoPermissionSettings(getActivity());} else {Toast.makeText(getActivity(), "获取权限失败", Toast.LENGTH_SHORT).show();}}});

需要动态请求的权限目录如下:

     public static final String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES"; // 8.0及以上应用安装权限public static final String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW"; // 6.0及以上悬浮窗权限public static final String READ_CALENDAR = "android.permission.READ_CALENDAR"; // 读取日程提醒public static final String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR"; // 写入日程提醒public static final String CAMERA = "android.permission.CAMERA"; // 拍照权限public static final String READ_CONTACTS = "android.permission.READ_CONTACTS"; // 读取联系人public static final String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS"; // 写入联系人public static final String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS"; // 访问账户列表public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION"; // 获取精确位置public static final String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION"; // 获取粗略位置public static final String RECORD_AUDIO = "android.permission.RECORD_AUDIO"; // 录音权限public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; // 读取电话状态public static final String CALL_PHONE = "android.permission.CALL_PHONE"; // 拨打电话public static final String READ_CALL_LOG = "android.permission.READ_CALL_LOG"; // 读取通话记录public static final String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG"; // 写入通话记录public static final String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL"; // 添加语音邮件public static final String USE_SIP = "android.permission.USE_SIP"; // 使用SIP视频public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS"; // 处理拨出电话public static final String ANSWER_PHONE_CALLS = "android.permission.ANSWER_PHONE_CALLS";// 8.0危险权限:允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 acceptRingingCall() 函数public static final String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS";// 8.0危险权限:权限允许您的应用读取设备中存储的电话号码public static final String BODY_SENSORS = "android.permission.BODY_SENSORS"; // 传感器public static final String SEND_SMS = "android.permission.SEND_SMS"; // 发送短信public static final String RECEIVE_SMS = "android.permission.RECEIVE_SMS"; // 接收短信public static final String READ_SMS = "android.permission.READ_SMS"; // 读取短信public static final String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH"; // 接收WAP PUSH信息public static final String RECEIVE_MMS = "android.permission.RECEIVE_MMS"; // 接收彩信public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; // 读取外部存储public static final String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE"; // 写入外部存储

2、地图的网络权限

         <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> //获取设备网络状态,禁用后无法获取网络状态<uses-permission android:name="android.permission.INTERNET"/> //网络权限,当禁用后,无法进行检索等相关业务<uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取设备硬件信息,统计数据<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //读取系统信息,包含系统版本等信息,用作统计<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //获取设备的网络状态,鉴权所需网络代理<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图<uses-permission android:name="android.permission.WRITE_SETTINGS" /> //获取统计数据<uses-permission android:name="android.permission.CAMERA" />  //使用步行AR导航,配置Camera权限

3、 地图的BUG
在实现的过程中 遇到一种状况,在进入界面中正常显示了当前定位之后,在手机上把网络或者GPS定位关闭了,之后,点击定位,程序崩溃的问题
处理方式:在MyLocationListener 中实现onLocDiagnosticMessage方法,该方法用于处理异常定位情况
衍生问题由于onLocDiagnosticMessage是优先于定位处理异常情况,所以在定位onReceiveLocation方法中需要处理返回的异常信息不再显示的问题

    public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//得到当前的地址adfState.setMapAddress(location.getAddrStr());Log.e("是否是国外:", "" + (location.getLocationWhere() != BDLocation.LOCATION_WHERE_IN_CN));//BDLocation.getLocationWhere()方法可获得当前定位点是否是国内,它的取值及含义如下://BDLocation.LOCATION_WHERE_IN_CN:当前定位点在国内;//BDLocation.LOCATION_WHERE_OUT_CN:当前定位点在海外;if (location.getLocationWhere() != BDLocation.LOCATION_WHERE_IN_CN) {//定位失败会优先调用onLocDiagnosticMessage方法,该方法已经提示了错误信息了,所以就不用再提示if (adfState.isShowMapError()) {Toast.makeText(mActivity, "定位失败,请打开定位服务", Toast.LENGTH_SHORT).show();}mLocationClient.stop();bdLocation = null;} else {bdLocation = location;setMapAddress();}}@Overridepublic void onLocDiagnosticMessage(int result, int type, String s) {super.onLocDiagnosticMessage(result, type, s);MapErrorUtil.showMapError(getActivity(), result, type);//由于该方法是先于定位执行,所以在弹出提示之后就禁止在弹出错误信息adfState.setShowMapError(false);}}

4、 关于地图上,显示的定位图标偏移,不是垂直显示的问题
解决办法:在设置MyLocationData参数的时候,有个设置偏移度的方法direction(XX),XX代表偏移的度数,范围是(0-360),设置的度数不同,图标就会偏移相同的度数
要垂直显示,直接设置XX为0 就可以解决了

5、 地图 经纬度转地址,地址转经纬度
解决方法: 在初始化地图时候实现GeoCoder这个类的setOnGetGeoCodeResultListener方法,就可以了

     GeoCoder geoCoder;//定义一个变量geoCoder = GeoCoder.newInstance();//设置地址或经纬度反编译后的监听,这里有两个回调方法,geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {//经纬度转换成地址@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(MapActivity.this, "找不到该地址!", Toast.LENGTH_SHORT).show();}LogUtils.e("地址:" + result.getAddress());mapAddress = result.getAddress();}//把地址转换成经纬度@Overridepublic void onGetGeoCodeResult(GeoCodeResult result) {}});

在地图定位的BaiduMap.OnMapClickListener 的onMapClick中注册该方法

         BaiduMap.OnMapClickListener listene1 = new BaiduMap.OnMapClickListener() {/*** 地图单击事件回调函数* @param point 点击的地理坐标*/@Overridepublic void onMapClick(LatLng point) {//....  其他的代码// 设置反地理经纬度坐标,请求位置时,需要一个经纬度geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(point));}@Overridepublic boolean onMapPoiClick(MapPoi mapPoi) {return false;}};

百度地图相关问题总结相关推荐

  1. iOS--百度地图相关功能的实现

    ###一.配置百度地图SDK ####1. 申请密钥 进入应用管理平台,点击创建应用然后点击提交 密钥就申请成功了!! 在左侧的查看应用里面,就可以看到刚刚申请好的密钥. ####2. 下载百度地图S ...

  2. Android百度地图相关总结

    一.百度坐标转换成gps坐标 搜了很多资料,几乎都是下面这个方法,但是都是根据计js来的,并没有安卓里面可以使用的方案. js中百度坐标转成gps坐标的方法 上面链接中的方案大致如下: 1.将要转换的 ...

  3. 百度地图经常崩溃的问题

    2019独角兽企业重金招聘Python工程师标准>>> title: 百度地图经常崩溃的问题 date: 2015-11-14 11:23:45 categories: IOS ta ...

  4. Android百度地图定位

    在谈到百度地图.如今,每个人都知道这个时候应该可以了吧.而更多的字不拉.直接朝话题. 访问百度地图api您必须应用key,应用在这里key不用说,有官方的文件说明如何应用上述key. 在这里,百度地图 ...

  5. [android] 百度地图开发 (二).定位城市位置和城市POI搜索

    一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位 ...

  6. Android开发之百度地图定位以及简单覆盖物的实现

    直接上代码: 先看下效果图: 我这里主要做了三个功能: 1.一秒钟实时定位功能: 2.添加任意经纬度地点到地图上: 3.判断朝阳门是否在本人定位范围1000米内: 百度地图初始化方法: DemoApp ...

  7. 求职产品经理【十六】笔试真题串讲之百度地图与大数据结合的产品

    今天我们进入笔试真题串讲的第一节课,我会给大家详细讲一下需求分析题的答题技巧. 看一下下面这道题:来自百度的校招真题 请设计一款百度地图和大数据相结合的产品,产品形态不限(需要说清楚包括但不限于以下内 ...

  8. php 嵌入手机百度地图,C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点:WebBr ...

  9. java百度地图逆地址解析_web前端通过百度地图API批量逆解析地址

    前言 最近碰到一个需求,就是将我们系统中要导出一系列的工作数据,这里面有一个需求就是根据工作人员的经纬度去获取他可能的位置.说到这里大家肯定能想到用地图API了,我这里用的是百度地图的API(详情可参 ...

最新文章

  1. kali2020.1正确安装下载中文输入法及问题解决
  2. oracle 里面定时执行任务,比如存储过程内容等
  3. 算法导论之斐波那契堆
  4. 【牛客 - 318M】被打脸的潇洒哥(几何问题,水题,结论,知识点)
  5. web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
  6. 计算机大学英语值最高的3项,计算机等级考试一级B上机试题:Windows字处理
  7. history指令显示日期时间
  8. The eighth of Word-Day
  9. CTGU实验6_1-创建能否借书存储过程
  10. js分享到第三方平台
  11. 【历史上的今天】12 月 12 日:英特尔创始人出生;PSP 发布;双十二购物狂欢节
  12. 一度智信:拼多多平台推广有哪些
  13. WPS(word)批量给所有表格添加题注(标题)
  14. Py函数直接传入root是啥意思_阿里云python课程笔记(四):函数amp;类和对象
  15. 【Spark | SparkStreaming】
  16. 中文论文撰写技巧(word)——参考文献的交叉引用
  17. Java版简易画图板的实现
  18. facebook创始人简介-马克·扎克伯格
  19. 在线帮助文档的6大最佳创建方法,让用户更轻松的了解企业产品
  20. 【面试总结】小灰灰求职进行曲(四)操作系统

热门文章

  1. 1.记住密码 提示框
  2. Oracle 优化相关
  3. HashMap的hash冲突解决方案
  4. 让PHP程序永远在后台运行
  5. NEU 1497 Kid and Ants 思路 难度:0
  6. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态
  7. Android与Javascript交互示例(二)
  8. RouteOS的DHCP服务器配置
  9. Python进阶_wxpy学习:异常chu'li
  10. CentOS下挂载iso文件