求帮助有谁使用过百度api定位当前位置的API来定位显示当前的城市

百度地图api获取经纬度和城市名称
想集成百度API定位需要完成以下步骤:
1:注册开发者
3:下载jar包
4:代码集成
先看下效果:
1:注册开发者
最好提前申请,审核需要1,2天
本人用的是Android Studio,所以用命令行查看SHA1码
3:下载jar包
只需下载定位功能的开发包即可
4:代码集成(详细可见官方讲解,以下代码以简洁实用为主)
package com.union.roid.
import android.app.A
import android.os.B
import android.util.L
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
public class MainActivity extends Activity {
public LocationClient mLocationClient =
public BDLocationListener myListener = new MyLocationListener();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLocationClient = new LocationClient(getApplicationContext());//声明LocationClient类
mLocationClient.registerLocationListener(myListener);//注册监听函数
LocationClientOption option = new LocationClientOption();//设置请求参数
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置定位模式
option.setCoorType(bd09ll);//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true);//返回的定位结果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
mLocationClient.setLocOption(option);
mLocationClient.start();//启动请求
if (mLocationClient != null && mLocationClient.isStarted())
mLocationClient.requestLocation();
Log.d(Location, locClient is null or not started);
public class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
if (location == null)
StringBuffer sb = new StringBuffer(256);
sb.append(time : );
sb.append(location.getTime());
sb.append(
error code : );
sb.append(location.getLocType());
sb.append(
latitude : );
sb.append(location.getLatitude());
sb.append(
lontitude : );
sb.append(location.getLongitude());
sb.append(
radius : );
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation) {
sb.append(
speed : );
sb.append(location.getSpeed());
sb.append(
satellite : );
sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
sb.append(
sb.append(location.getAddrStr());
Log.v(---&, =========);
Log.v(---&, sb.toString());
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Android百度地图之位置定位和附近查找代码简单实现 (上)
博客专家
Android百度地图之位置定位和附近查找代码简单实现 (上)
& & & & 很长时间没有做Android相关知识了,闲暇之余再弄了弄最新的百度地图API,主要是进行百度地图附近餐馆查找功能来练练手,同时熟悉下最新的API教程。文章比较基础,也希望对你有所帮助~参考前文:
& & & & 官方网址:
& & & & Demo下载地址:
一. 配置百度API环境
& & & & 获取百度地图API Key前,遇到的第一个问题是“小米手机或豌豆荚不能识别USB插口”。解决方法是安装QuickShortcutMaker软件,输入USB启动计算机USB连接。
& & & & 参考地址:
& & & & 百度地图AndroidSDK介绍如下:
& & & & 第一步:创建百度地图API Key
& & & & 在使用之前,您需要先申请密钥,且密钥和应用证书和包名绑定。
& & & & 申请应用新地址:
& & & & 百度地图Android SDK申请密钥Key方法如下,也可参照我以前写过的一篇文章:
& & & & 其中数字签名SHA1通过点击Eclipse的 &窗体(Window)-&首选项(Preferences)-&Android-&Build& 查看,而包名是创建工程BaiduMapRes项目中的包。
& & & & 第二步:下载Android SDK并配置
& & & & Android SDK v3.1.0下载地址:
& & & & 最新下载地址,可以选择自己喜欢的开发资源,它会提供相应的文件包:
& & & &&在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下,拷贝完成后的工程目录如下图所示:
& & & & 同时需要导入jar包,右键工程-&&Properties(属性)&-&&Java构建路径&,选择添加JAR,选定baidumapapi_vX_X_X.jar,确定后返回。
二.&Hello BaiduMapAndroid SDK
& & & & &第一个百度地图程序参考网址,简单进行叙述下:
& & & & &第一步:在AndroidManifest中添加开发密钥、所需权限等信息
& & & & &在application中添加开发密钥&&application&&meta-data&/&&/application&
并添加相关权限。
&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&com.example.baidumapres&
android:versionCode=&1&
android:versionName=&1.0& &
android:minSdkVersion=&19&
android:targetSdkVersion=&19& /&
&!-- 获取网络状态
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&!-- 访问网络 --&
&uses-permission android:name=&android.permission.INTERNET& /&
&!-- 获取WiFi状态 --&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&!-- 允许程序写入外部存储,如SD卡上写文件 --&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&
&!-- 读取电话状态 --&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.CALL_PHONE& /&
&!-- 获取精确位置 GPS芯片接收卫星的定位信息,定位精度达10米以内 --&
&uses-permission android:name=&android.permission.ACCESS_FINE_LOCATION& /&
&!-- 通过WiFi或移动基站的方式获取用户错略的经纬度信息 --&
&uses-permission android:name=&android.permission.ACCESS_COARSE_LOCATION& /&
&!-- 获取模拟定位信息 --&
&uses-permission android:name=&android.permission.ACCESS_MOCK_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_GPS& /&
&uses-permission android:name=&com.android.launcher.permission.READ_SETTINGS& /&
&uses-permission android:name=&android.permission.WAKE_LOCK&/&
&uses-permission android:name=&android.permission.GET_TASKS& /&
&application
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
&meta-data
android:name=&com.baidu.lbsapi.API_KEY&
android:value=&OYl0tcWvGrWtWucQN2rhdxG8& /&
android:name=&com.example.baidumapres.MainActivity&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&/application&
&/manifest&
& & & & 第二步:在布局xml文件中添加地图控件
& & & & 布局文件activity_main.xml中通过加载百度地图控件MapView,它是由百度提供的自定义控件故需要加上完整包名,同时该控件需要接受点击事件clickable设置为true。
&FrameLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:id=&@+id/container&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
tools:context=&com.example.baidumapres.MainActivity&
tools:ignore=&MergeRootFrame& &
&com.baidu.mapapi.map.MapView
android:id=&@+id/map_view&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:clickable=&true& /&
&/FrameLayout&
& & & & 第三步:MainActivity.java文件,创建地图Activity,管理地图生命周期
package com.example.
import java.util.ArrayL
import java.util.L
import com.baidu.mapapi.SDKI
import com.baidu.mapapi.map.BaiduM
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.map.OverlayO
import com.baidu.mapapi.map.PolygonO
import com.baidu.mapapi.map.S
import com.baidu.mapapi.model.LatL
import android.app.A
import android.os.B
public class MainActivity extends Activity {
private MapView mMapView =
private BaiduMap mBaiduM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.map_view);
* 设置地图类型 普通地图
* 卫星地图
* mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
* 开启交通图
* mBaiduMap.setTrafficEnabled(true);
mBaiduMap = mMapView.getMap();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//几何图形覆盖物
//定义多边形的五个顶点
LatLng pt1 = new LatLng(39.97428);
LatLng pt2 = new LatLng(39.97428);
LatLng pt3 = new LatLng(39.87428);
LatLng pt4 = new LatLng(39.87428);
LatLng pt5 = new LatLng(39.97428);
List&LatLng& pts = new ArrayList&LatLng&();
pts.add(pt1);
pts.add(pt2);
pts.add(pt3);
pts.add(pt4);
pts.add(pt5);
//构建用户绘制多边形的Option对象
OverlayOptions polygonOption = new PolygonOptions()
.points(pts)
.stroke(new Stroke(5, 0xAA00FF00))
.fillColor(0xAAFFFF00);
//在地图上添加多边形Option,用于显示
mBaiduMap.addOverlay(polygonOption);
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
& & & & 运行该代码简单的测试结果如下所示:包括卫星地图、交通地图、普通地图和五边形覆盖物,其他覆盖物参考。
三. 百度地图位置定位
& & & & 基础地图功能介绍参考:
& & & & 类方法介绍:
& & & & 例如参考下图:
& & & & 其中百度地图定位主要参考我以前的代码和crazy1235(推荐大家学习)的文章:
& & & & 需要注意的地方和核心步骤包括:
& & & & 1.需要添加定位SDK包,在libs中添加locSDK_3.1.jar和liblocSDK3.so;
& & & & 2.在AndroidManifest.xml文件中设置service:
&application&
&meta-data
android:name=&com.baidu.lbsapi.API_KEY&
android:value=&OYl0tcWvGrWtWucQN2rhdxG8& /&
&activity&....&/activity&
android:name=&com.baidu.location.f&
android:enabled=&true&
android:process=&:remote& &
&/service&
&/application&& & & & 3.代码中通过BDLocationListener实现定位监听,具体代码如下:
package com.example.
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
import com.baidu.mapapi.SDKI
import com.baidu.mapapi.map.BaiduM
import com.baidu.mapapi.map.BitmapD
import com.baidu.mapapi.map.BitmapDescriptorF
import com.baidu.mapapi.map.CircleO
import com.baidu.mapapi.map.MapStatusU
import com.baidu.mapapi.map.MapStatusUpdateF
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.map.MarkerO
import com.baidu.mapapi.map.MyLocationC
import com.baidu.mapapi.map.MyLocationConfiguration.LocationM
import com.baidu.mapapi.map.MyLocationD
import com.baidu.mapapi.map.OverlayO
import com.baidu.mapapi.map.S
import com.baidu.mapapi.model.LatL
import android.app.A
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.T
public class MainActivity extends Activity {
//百度地图控件
private MapView mMapView =
//百度地图对象
private BaiduMap mBaiduM
//按钮 添加覆盖物
private Button addOverlayB
//是否显示覆盖物 1-显示 0-不显示
private int isShowOverlay = 1;
//按钮 定位当前位置
private Button locCurplaceB
//是否首次定位
private boolean isFirstLoc =
//定位SDK的核心类
private LocationClient mLocC
//定位图层显示模式 (普通-跟随-罗盘)
private LocationMode mCurrentM
//定位图标描述
private BitmapDescriptor mCurrentMarker =
//当前位置经纬度
//定位SDK监听函数
public MyLocationListenner locListener = new MyLocationListenner();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件
mMapView = (MapView) findViewById(R.id.map_view);
addOverlayBtn = (Button) findViewById(R.id.btn_add_overlay);
locCurplaceBtn = (Button) findViewById(R.id.btn_cur_place);
addOverlayBtn.setEnabled(false);
//设置地图缩放级别16 类型普通地图
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);
mBaiduMap.setMapStatus(msu);
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//开启定位图层
mBaiduMap.setMyLocationEnabled(true);
//定位初始化
//注意: 实例化定位服务 LocationClient类必须在主线程中声明 并注册定位监听接口
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(locListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType(&bd09ll&);
//设置坐标类型
option.setScanSpan(5000);
//设置发起定位请求的间隔时间为5000ms
mLocClient.setLocOption(option);
//设置定位参数
mLocClient.start();
//调用此方法开始定位
//Button 添加覆盖物
addOverlayBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
addCircleOverlay();
//Button 定位当前位置
locCurplaceBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
addMyLocation();
* 定位SDK监听器 需添加locSDK jar和so文件
public class MyLocationListenner implements BDLocationListener {
public void onReceivePoi(BDLocation location) {
public void onReceiveLocation(BDLocation location) {
//mapview 销毁后不在处理新接收的位置
if (location == null || mBaiduMap == null) {
//MyLocationData.Builder定位数据建造器
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(100)
.latitude(location.getLatitude())
.longitude(location.getLongitude())
//设置定位数据
mBaiduMap.setMyLocationData(locData);
mCurrentMode = LocationMode.NORMAL;
//获取经纬度
latitude = location.getLatitude();
longitude = location.getLongitude();
//Toast.makeText(getApplicationContext(), String.valueOf(latitude), Toast.LENGTH_SHORT).show();
//第一次定位的时候,那地图中心点显示为定位到的位置
if (isFirstLoc) {
isFirstLoc =
//地理坐标基本数据结构
LatLng loc = new LatLng(location.getLatitude(),location.getLongitude());
//MapStatusUpdate描述地图将要发生的变化
//MapStatusUpdateFactory生成地图将要反生的变化
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(loc);
mBaiduMap.animateMapStatus(msu);
Toast.makeText(getApplicationContext(), location.getAddrStr(),
Toast.LENGTH_SHORT).show();
* 定位并添加标注
private void addMyLocation() {
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
mBaiduMap.clear();
addOverlayBtn.setEnabled(true);
//定义Maker坐标点
LatLng point = new LatLng(latitude, longitude);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
* 添加覆盖物
private void addCircleOverlay() {
if(isShowOverlay == 1) {
//点击显示
mBaiduMap.clear();
isShowOverlay = 0;
//DotOptions 圆点覆盖物
LatLng pt = new LatLng(latitude, longitude);
CircleOptions circleOptions = new CircleOptions();
//circleOptions.center(new LatLng(latitude, longitude));
circleOptions.center(pt);
//设置圆心坐标
circleOptions.fillColor(0xAAFFFF00);
//圆填充颜色
circleOptions.radius(250);
//设置半径
circleOptions.stroke(new Stroke(5, 0xAA00FF00));
// 设置边框
mBaiduMap.addOverlay(circleOptions);
mBaiduMap.clear();
isShowOverlay = 1;
protected void onDestroy() {
mLocClient.stop();
//退出时销毁定位
mBaiduMap.setMyLocationEnabled(false);
//关闭定位图层
mMapView.onDestroy();
mMapView =
super.onDestroy();
protected void onResume() {
super.onResume();
mMapView.onResume();
protected void onPause() {
super.onPause();
mMapView.onPause();
}& & & & 运行结果如下图所示&我的位置&和&添加覆盖物&:
四. 百度地图POI附近餐馆查找
& & & & PS:这部分下一篇文章将详细介绍,主要是POI附件餐馆和路线规划。
五. 新年祝福
& & & & 最后分享自己圣诞节大学面试和新年祝福的qq说说,与君卿共勉~
& & &《你明明可以靠才华吃饭,却偏偏要去拼颜值》
& & & 很幸运!第一次坐飞机,是为了回家那边的大学去讲课和面试;第一次穿西装,白衬衣里套了三件衣服,其中一件毛衣,别冷着自己就行;第一份圣诞老人的礼物,居然是一份讲台前当老师的承诺。
& & & 来之前,一位朋友曾问过我:“你明明可以靠才华吃饭,却偏偏要去拼颜值教书吗?”我的回答是:“我有颜值吗?哈哈,其实教书也能展现我的才华与魅力的啊!”
& & & 的确,我也可以去到一个公司,扎扎实实写代码,一个月一万四左右;也有很多创业公司找我做搜索图谱、图像处理、python、selenium。但我更期待自己在讲台前和科研实验室的情景,画面太美,不敢想。
& & & 十年后,我不知道自己会不会像春哥的老师一样,也写一篇《别了,这狗日的科研》而放弃大学?但此时此刻还是非常乐观的,至少除了科研教学外,我还会写点代码,这就饿不着;还可以写点文章博客和讲课吧。很多时候,想是一回事,说是一回事,做又是另外一回事。一辈子,又能做多少自己喜欢的事情呢?对吧!
& & & 刚刚找工作的那段时间,我看到了一句话:千里马若有人赏识,不论对错,不为输赢。我那时也希望我为一家IT公司奉献很多年,赚个几十万。但后来,我才发现最欣赏我这匹“蠢马”的伯乐,应该在大学,或许就是芸芸众生中的学子一员,或许是那个面试的领导(虽然他一直想不明白一个搞软件的男生为什么要来贵州这边的大学),再或许就是我自己的孤芳自赏吧!
& & &《低俗小说》里面好像有这样一句话:Pride only hurts, it never helps. 有时候自尊心只会让你受伤,其他毫无用处。希望自己在大学能抹去那份傲娇,跟着心走,十年如一日的去坚持那份热情吧!毕竟短暂的激情是不值钱的,只有长久的激情才值钱。
& & & &哎!讲完课的当时,还是有一点低落,工资现在只有开发的一个零头了。痛,所以我这么多搞开发的小伙们,以后来找你们玩的时候,懂吧!哈哈,开个玩笑~这里的工作环境和方式我真心喜欢,而且又能教书!
& & & &最后用自己的博客签名结束这篇文章吧!“无知·乐观·低调·谦逊·生活“。时刻告诉自己:无知的我需要乐观的去求知,低调的底色是谦逊,而谦逊是源于对生活的通透,我们不止有工作、学习、编程,还要学会享受生活,人生何必走得这么匆忙,开心就好!fighting
& & & & 新的一年自己最大的愿望就是希望成为一名大学老师,并且身体健康就好!
& & & &(By:Eastmount
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 百度地图api 定位城市 的文章

 

随机推荐