入职新公司之后,需要对现有的手机项目进行改版
第一个改版就是在应用中添加定位的功能,可以用百度地图和高德地图sdk实现。
要求:gps或者网络定位到当前位置,取精度高的位置并返回详细地址描述

先来看看使用百度地图sdk的实现方法

申请密钥:
Android SDK安全码组成:数字签名+;+包名。

数字签名是这个

包名在manifest文件中查看

之后我们就能拿到api_key了。

下载定位sdk放到项目中:
添加如下文件

armeabi文件夹中文件和baidulbs_android.jar

添加到buildpath,你们懂得。

配置sdk:

由于百度地图sdk要在Application中初始化,重写一个application并且在manifest中配置

    <applicationandroid:name="com.example.map.LocationApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >

重写的application只要做一件事就行:

 @Overridepublic void onCreate() {super.onCreate();SDKInitializer.initialize(this);}

配置服务和key

        <serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote" ><intent-filter><action android:name="com.baidu.location.service_v2.2" ></action></intent-filter></service>    <meta-data  android:name="com.baidu.lbsapi.API_KEY"  android:value="你的key" />  

初始化并启用定位:

这里只贴关键代码,具体项目我会在稍后上传。

//   初始化并注册
mLocationClient = new LocationClient(getActivity().getApplicationContext());
mLocationClient.registerLocationListener(this);startLocation = (Button)view.findViewById(R.id.addfence);
startLocation.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLocationClientOption option = new LocationClientOption();option.setLocationMode(tempMode);//设置定位模式option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02国测局坐标系option.setScanSpan(span);//设置发起定位请求的间隔时间为1000msoption.setIsNeedAddress(true);mLocationClient.setLocOption(option);if(startLocation.getText().equals(getString(R.string.startlocation))){mLocationClient.start();startLocation.setText(getString(R.string.stoplocation));}else{mLocationClient.stop();startLocation.setText(getString(R.string.startlocation));}}
});

mLocationClient.start()
执行之后,结果会返回到回调方法
onReceiveLocation(BDLocation location)
要接收这个结果,需要实现BDLocationListener这个接口。

定位sdk只返回了经纬度,没返回格式化地址,于是我们还需要地图sdk中的服务。
注意!地图sdk和定位sdk是区别开的。

我们在onReceiveLocation中已经取得经纬度,然后我们进行反向地理编码:将地球表面的地址坐标转换为标准地址。
这里需要实现OnGetGeoCoderResultListener这个接口。

GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
LatLng ptCenter=new LatLng(location.getLatitude(), location.getLongitude());
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));

代码中的
location就是onReceiveLocation中取得的location
reverseGeoCode方法执行之后,结果会返回到回调方法onGetReverseGeoCodeResult之中去
然后我们在这个方法中重写我们需要的代码就可以了。

由于我使用了fragment,所以代码和普通的demo不一样。

这只是项目的部分代码,完整代码稍后上传。

源码:

package com.example.mainframework02.fragment;import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;import com.baidu.location.BDGeofence;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.example.activity.R;
import com.example.map.LocationApplication;@SuppressLint("NewApi")
public class MainTab02 extends Fragment  implements BDLocationListener, OnGetGeoCoderResultListener
{private LocationClient mLocationClient;GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用private TextView LocationResult;private Button startLocation;private LocationMode tempMode = LocationMode.Hight_Accuracy;
//  private String tempcoor=BDGeofence.COORD_TYPE_GCJ;
//  private String tempcoor=BDGeofence.COORD_TYPE_BD09;//百度加密墨卡托坐标private String tempcoor=BDGeofence.COORD_TYPE_BD09LL;//百度加密经纬度坐标private int span=2000;public static final int  OPERATORS_TYPE_MOBILE=1;public static final int    OPERATORS_TYPE_TELECOMU =  3;public static final int   OPERATORS_TYPE_UNICOM   = 2;public static final int    OPERATORS_TYPE_UNKONW   = 0;public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){View view=inflater.inflate(R.layout.main_tab_02, container, false);
//      初始化并注册mLocationClient = new LocationClient(getActivity().getApplicationContext());mLocationClient.registerLocationListener(this);
//      mLocationClient = ((LocationApplication)getActivity().getApplication()).mLocationClient;LocationResult = (TextView)view.findViewById(R.id.textView1);
//       ((LocationApplication)getActivity().getApplication()).mLocationResult = LocationResult;mSearch = GeoCoder.newInstance();mSearch.setOnGetGeoCodeResultListener(this);startLocation = (Button)view.findViewById(R.id.addfence);startLocation.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubInitLocation();if(startLocation.getText().equals(getString(R.string.startlocation))){mLocationClient.start();startLocation.setText(getString(R.string.stoplocation));}else{mLocationClient.stop();startLocation.setText(getString(R.string.startlocation));}}});return view;}private void InitLocation(){LocationClientOption option = new LocationClientOption();option.setLocationMode(tempMode);//设置定位模式option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02国测局坐标系option.setScanSpan(span);//设置发起定位请求的间隔时间为1000msoption.setIsNeedAddress(true);mLocationClient.setLocOption(option);}@Overridepublic void onGetGeoCodeResult(GeoCodeResult arg0) {// TODO Auto-generated method stub}StringBuffer sb = new StringBuffer(256);@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {// TODO Auto-generated method stubif (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {Log.i("GeoLog", "GeoError");return;}sb.append("\n详细地址信息 : ");sb.append(result.getAddress()+"\n");sb.append("\n省 : "+result.getAddressDetail().province+"\n市 : "+result.getAddressDetail().city+"\n区 : "+result.getAddressDetail().district+"\n街道 : "+result.getAddressDetail().street+"\n街道号码 : "+result.getAddressDetail().streetNumber+"\n");}@Overridepublic void onReceiveLocation(BDLocation location) {// TODO Auto-generated method stub
//      StringBuffer sb = new StringBuffer(256);sb.setLength(0);sb.append("当前定位时间 : ");sb.append(location.getTime());sb.append("\n错误码 : ");sb.append(location.getLocType());sb.append("\n定位精度 : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation){sb.append("\n捕捉到gps\n速度 : ");sb.append(location.getSpeed());sb.append("\n卫星数量 : ");sb.append(location.getSatelliteNumber());sb.append("\n方向 : ");sb.append(location.getDirection());LatLng ptCenter=new LatLng(location.getLatitude(), location.getLongitude());mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));//                sb.append("\n省 : ");
//              sb.append(location.getProvince());
//              sb.append("\n市 : ");
//              sb.append(location.getCity());
//              sb.append("\n区 : ");
//              sb.append(location.getDistrict());
//              sb.append("\n详细地址信息 : ");
//              sb.append(location.getAddrStr());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){sb.append("\n移动网络\n详细地址信息: ");sb.append(location.getAddrStr());sb.append("\n省 : ");sb.append(location.getProvince());sb.append("\n市 : ");sb.append(location.getCity());sb.append("\n区 : ");sb.append(location.getDistrict());//运营商信息sb.append("\n运营商: ");switch (location.getOperators()) {case OPERATORS_TYPE_MOBILE:sb.append("中国移动\n");break;case OPERATORS_TYPE_TELECOMU:sb.append("中国电信\n");break;case OPERATORS_TYPE_UNICOM:sb.append("中国联通\n");break;case OPERATORS_TYPE_UNKONW:sb.append("未知运营商\n");break;default:break;}}logMsg(sb.toString());Log.i("BaiduLocationApiDem", sb.toString());}@Overridepublic void onStop() {// TODO Auto-generated method stubmLocationClient.stop();super.onStop();}@Overridepublic void onDestroy() {mSearch.destroy();super.onDestroy();}/*** 显示请求字符串* @param str*/public void logMsg(String str) {try {if (LocationResult != null)LocationResult.setText(str);} catch (Exception e) {e.printStackTrace();}}}

用百度地图sdk返回详细地址描述相关推荐

  1. 百度地图api根据详细地址反查坐标

    用百度地图api根据详细地址反查坐标 /*** 根据详细地址反查坐标* @param args*/public static void main(String[] args) {String addr ...

  2. Android百度地图SDK最新详细使用(包含demo)

    直接上效果图: 2019-10-17 18:20:16.079 12664-12664/com.example.baidumapdemo I/location: 地址为====四川省宜宾市长宁县Y02 ...

  3. html5移动端根据百度地图api获取详细地址

    <script type="text/javascript" src="js/BMap.js" ></script><script ...

  4. 使用百度地图SDK进行地址搜索、定位的工作小结

    近期因为需求开发的原因,使用了百度地图SDK,现总结如下: 一.地址搜索页面 很多同学一上来就会想到使用SuggestionSearch类来实现,但是SuggestionSearch的本身含义是搜索联 ...

  5. Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能

    from: http://blog.csdn.net/y1scp/article/details/49095729 定位+移动选址 百学须先立志-学前须知: 我们经常在各大主流APP上要求被写上地址, ...

  6. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  7. 百度地图 sdk 使用小结(行动轨迹)

    最近把之前的地图代码再看了一遍,想借此机会小结一番,下面是效果图,点没取好,凑合看吧. 这里做的是一个地图上的行为轨迹,包含各个点的覆盖物以及路线绘制,需要用到百度地图定位 SDK,具体如何引入百度地 ...

  8. 腾讯小程序php,微信小程序实现使用腾讯地图SDK步骤详细介绍

    这篇文章微信小程序实现使用腾讯地图SDK步骤详细介绍的相关资料,需要的朋友可以参考下 微信小程序 使用腾讯地图SDK详解及实现步骤 近期在做一款彩票服务类项目中用到了腾讯地图提供的小程序解决方案,拿来 ...

  9. 百度地图SDK for Android【离线地图】

    1离线地图简介 百度地图SDK自2.0.0版本起,采用的是矢量版离线地图(1.3.5及之前版本依旧使用栅格版离线地图),请开发者在下载时注意选择.矢量版地图支持旋转.3D特效,且体积远小于栅格版,因此 ...

最新文章

  1. H - Fibonacci POJ - 3070 (矩阵快速幂)
  2. 2015.11.10 asn1学习笔记
  3. HP ProLiant服务器收集日志的方法
  4. PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
  5. 用 Flask 来写个轻博客
  6. 又见GCD (已知最大公约数和其中一个数求另一个数)
  7. 常见Java面试题 在Queue中poll()和remove()有什么区别?
  8. 阅读react-redux源码 - 零
  9. IBM AIX 5.3 系统管理 -- 系统启动过程详解
  10. 渔村小厂,如何成长为5G霸王
  11. 使用猎码的浏览器组件开发安卓H5打包APK
  12. 12.逻辑运算符与、或、非、双感叹号、双问号
  13. 武汉_金山wps Java 一面 二面
  14. skb_buff操作
  15. 阿里无线11.11 | 手机淘宝主会场实践之路
  16. ftp服务器上图片文件显示不出来,ftp服务器上图片文件显示
  17. 本轮大宗商品涨价:(背后原因分析)2021-09
  18. Google Chrome Windows平台稳定版离线安装包下载
  19. 【Unity自己写框架】FairyGUI UI框架(一)
  20. CodeBlocks编译环境配置及调试问题

热门文章

  1. 学习布局(21)HTML5新标签
  2. mysql复制技术与生产实践pdf下载
  3. Java在PDF文档中添加或删除页面
  4. 批量识别图片中文字(python、百度开发者工具)
  5. ARCGIS水文分析:水库容量和蓄水区计算
  6. 优盘启动盘恢复为普通优盘
  7. c#为什么用的人很少
  8. EXCEL内容很少文件却很大---如何变小
  9. Peewee 使用手册
  10. 选修课:唐宋词鉴赏课堂笔记03