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 ...
随机推荐
- jQuery.dialog
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
- JSP页面的异常处理<转>
对于jsp页面错误处理这里大致有两种方式:一.在Web.xml中配置全局的错误异常处理 即凡是该项目下(即虚拟路径下的所有文件)的任意一个文件错误或者异常,都会跳到指定的错误处理页面. ...
- iostat 使用说明
LINUX [oracle@perass back]$ iostat -m 1 10 Linux 2.6.18-194.el5 (perass) 03/01/2014 avg-cpu: %user % ...
- bzoj1135
POI阴影又发作了但这道题挺好的,比较涨知识裸的想法是裸的每次二分图匹配,但显然会TLE这里就要引入Hall定理:二分图G中的两部分顶点组成的集合分别为X, Y, X={X1, X2, X3,X4,. ...
- -_-#【H5】meta / href
常用的 HTML 头部标签 关闭Android/iPhone浏览器自动识别数字为电话号码 <meta name="format-detection" content=&quo ...
- 什么是左值(what is a lvalue)?
引用并翻译自<C++ premier plus> 左值是可以通过地址引用的数据对象(data object),例如,变量,数组的元素,结构体的成员,引用变量,以及复引用的指针(defere ...
- linux内网机器访问外网代理设置squid
公司一般出于安全考虑, 在同一局域网中只有一台机器可以访问外网,运维进行了整体的限制, 但是在后面的工作中,需要在机器上安装一些软件,及命令,所以其他的机器需要访问外网来简化工作, 但又不能打乱原有运 ...
- Android少量数据保存之SharedPreferences接口实例
SharedPreferences数据保存主要是通过键值的方式存储在xml文件中 xml文件在data/此程序的包名/XX.xml 格式 <?xml version='1.0' encoding ...
- springmvc框架原理分析
第一步:用户发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找Handler,可以根据xml配置,注解进行查找 第三步:处理器映射器Ha ...
- url找不到指定位置
刚才遇到了把css装入一个文件夹下,然后有的图片失效了. 后来解决是在.css里把./images 换成 ../images 原来css找图片的地址是基于自身.css文件的位置寻找的,不是以引用它的. ...