android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)
注意:此代码的环境是:真机(系统版本为Android4.2.2)+WIFI联网(才能实现最后的运行结果);使用虚拟机调试会出现各种问题。
第一步:下载SDK和申请Key
到百度的网站http://developer.baidu.com/map/

第二步:然后选择SDK下载。(根据需要下载需要的SDK)

第三步:申请key
http://developer.baidu.com/map/index.php?title=androidsdk

然后选择创建应用

需要填写:应用名称和数字签名(SHA1)和包名

应用名称就是:

数字签名:

菜单栏中的window--------->Preferences---------->Build

包名:

填进去之后就会自动生成。

生成一个访问AK,这个AK,一定要记住。

第四步:编码
《1》配置文件manifest.xml中加上权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET" /> <usespermission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
然后把刚才申请的key加上去:
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="你申请的key" />

然后在加上
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
《2》布局文件添加百度地图的布局:
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
《3》在libs文件夹下添加刚才下载的SDK(直接复制,粘贴进去就行了)

然后在把百度地图的JAR也添加到路径中去:
右键项目----------->Properties------>Java Build Path---->Libraries

添加进去之后,就可以了。
《4》MainActivity.java编码(头部的包就不写了,需要用到什么,自己添加):
public class MainActivity extends Activity {
//百度地图控件,专门显示地图用的控件
private MapView mMapView = null;
// 百度地图对象,抽象的地图对象
private BaiduMap bdMap;
//定位模式
private LocationMode currentMode;
//定位客户端
private LocationClient locClient;
//定位图标
private Marker marker1;
//经纬度
private double latitude, longitude;
// 记录是否第一次定位
private boolean isFirstLoc = true;
//地图上添加的定位图标
BitmapDescriptor bitmap;
//定位监听器
//BDLocationListener locListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
//保存之前Activity状态
super.onCreate(savedInstanceState);
// SDK初始化
SDKInitializer.initialize(getApplicationContext());
//设置android程序没有标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//显示布局界面
setContentView(R.layout.activity_main);
//获得显示地图的控件
mMapView = (MapView) findViewById(R.id.bmapview);
//tv_show=(TextView)findViewById(R.id.tv_show);
//在地图上显示的那个小图标
bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_marka);
init();
}
private void init() {
//定义地图状态
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
//获得地图对象
bdMap = mMapView.getMap();
//LatLng cenpt=new LatLng(30.963175f,120.400244f);
//BDLocation location;
//latitude = location.getLatitude();
// LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude());
// OverlayOptions options = new MarkerOptions()
// .position(cenpt)
// .icon(bitmap);
// MapStatus mMapStatus=new MapStatus.Builder()
// .target(cenpt)
// .zoom(18)
// .build();
//普通地图
bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
// MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//设置地图初始状态
bdMap.setMapStatus(msu);
//bdMap.addOverlay(options);
// bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL});
// map.setCurrentCity("北京市");
// map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18);
//当前定位模式为:普通
currentMode = LocationMode.NORMAL;
// 开启定位图层
bdMap.setMyLocationEnabled(true);
//定位服务的客户端
locClient = new LocationClient(this);
//注册监听函数
locClient.registerLocationListener(locListener);
//配置LocationClient这个定位客户端的定位参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll");// 设置坐标类型
option.setAddrType("all");//设置地址类型
option.setScanSpan(1000);//1s后定位
//配置客户端
locClient.setLocOption(option);
//启动定位(这一步很重要,不然前边注册的那个监听函数就没用了)
locClient.start();
}
//这个是就是定位的监听函数(获取定位坐标,在坐标上显示图标)
BDLocationListener locListener = new BDLocationListener(){
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null)
return ;
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())//
.direction(100)// 方向
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
// 获得经纬度
latitude = location.getLatitude();
longitude = location.getLongitude();
//设置定位数据
bdMap.setMyLocationData(locData);
// 第一次定位的时候,那地图中心店显示为定位到的位置
LatLng cenpt = new LatLng(latitude,longitude);
//定义覆盖物的坐标和使用的图标
OverlayOptions options = new MarkerOptions()
.position(cenpt)
.icon(bitmap);
//在地图上添加覆盖物
bdMap.addOverlay(options);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
// MapStatusUpdate描述地图将要发生的变化
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
//更新地图状态
bdMap.animateMapStatus(msu);
// bdMap.setMyLocationEnabled(false);
//reverseGeoCode(cenpt);
//显示地址信息
Toast.makeText(getApplicationContext(), location.getAddrStr(),
Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
}
下图是定位显示的定位结果

源码下载:http://pan.baidu.com/s/1jGlP32Q
android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)的更多相关文章
- Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
今天老板让我验证一下技术可行性,记录下来. 需求 :定位手机的位置并在百度地图上显示,得到位置后使用前置摄像头进行抓拍 拿到这个需求后,对于摄像头的使用不太熟悉,于是我先做了定位手机并在百度地图上显示 ...
- Android使用百度地图定位
下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...
- iOS 学习笔记五 【2016年百度地图定位详细使用方法】
具体介和配置绍在此就不详述了,详情请看百度地图API文档, 在这里具体讲解下,新版百度地图的定位与反地理编码的使用: 1.导入头文件 #import <BaiduMapAPI_Map/BMKMa ...
- android 中百度地图 关于地图缩放所调用的事件
在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好 官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...
- Android利用百度地图定位
百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: ...
- 兔子--android中百度地图的开发
效果: API Key的申请地址:http://lbsyun.baidu.com/apiconsole/key 申请注意事项: 安全码:以下界面的SHA1 fingerprint值+;+包名 比如: ...
- Android使用百度地图出现闪退及定位时显示蓝屏问题
目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题 1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...
- Android 百度地图定位(手动+自动) 安卓开发教程
近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置. 经过2天研究 ...
- Android studio 百度地图开发(2)地图定位
Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
随机推荐
- BZOJ 1050 旅行
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- JavaScript Application Architecture On The Road To 2015
JavaScript Application Architecture On The Road To 2015 I once told someone I was an architect. It’s ...
- 设置Git提交时不用输入用户名和密码
在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ...
- linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
•/etc/passwd文件用于存放用户账户信息,每行代表一个账户,每个账户的各项信息用冒号分割,例如: root:x:::root:/root:/bin/bash username:password ...
- Eqs (哈希)
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10695 Accepted: 5185 Description Cons ...
- bzoj2400
首先xor类的题目一定要逐位考虑,因为位位之间是不相互影响的逐位考虑每个点是0还是1,这就转化成了一个这样一个问题对于每个点可以选择属于S集合(这位是0)或T集合(这位是1)某些的点对(一条边的两端) ...
- 开源代码搜索器searchcode
项目主页:https://searchcode.com/ 查看API:https://searchcode.com/api/ 关于:https://searchcode.com/about/ Sear ...
- unicode编码、字符的转换和得到汉字的区位码
一:unicode编码.字符的转换截图 二:unicode编码.字符的转换代码 using System; using System.Collections.Generic; using System ...
- HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)
Problem Description 给你2个分数,求他们的和,并要求和为最简形式. Input 输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正 ...
- Velocity常用方法
1.字符串替换 replace#if($!{name} != '')#set($tempName = $!{name})#set($tempName = $tempName.Replace('abc' ...