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 ...
随机推荐
- WPF小程序:贪吃蛇
原文地址:http://hankjin.blog.163.com/blog/static/337319372009535108234/ 一共两个文件:EasterEgg.xaml + EasterEg ...
- appendGrid
appendGrid appendGrid的使用
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
- HDOJ(HDU) 2502 月之数(进制)
Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不 ...
- 控制uwsgi 的信号量
最近在用nginx+uwsgi+djano搭建一个网站,当.py文件修改后,如果不重启uwsgi,修改无法应用. 查了下uwsgi的相关文档 ,找到几个解决方案.顺便翻译下以备查看 启动服务 Star ...
- [Hibernate] 基本增删查改
本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...
- hdu 4705 dfs统计更新节点信息
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4705 #pragma comment(linker, "/STACK:16777216&qu ...
- hdu 4289 最小割,分拆点为边
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2609 #include <cstdio> #incl ...
- getting start with storm 翻译 第八章 part-1
转载请注明出处:http://blog.csdn.net/lonelytrooper/article/details/12434915 第八章 事务性Topologies 在Storm中,正如本书前边 ...
- 阿里IPO弃港赴美?
最近,关于阿里巴巴和香港联交所博弈的新闻一直长时间占据了各大科技媒体的头条.9月25日,香港联交所行政总裁在港交所其个人专栏“小加网志”中贴出一则名为<投资者保障杂谈>的博客文章,谈及“香 ...