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编码(头部的包就不写了,需要用到什么,自己添加):

  1 public class MainActivity extends Activity {
  2
  3     //百度地图控件,专门显示地图用的控件
  4
  5      private MapView mMapView = null;
  6
  7         // 百度地图对象,抽象的地图对象
  8
  9         private BaiduMap bdMap;
 10
 11         //定位模式
 12
 13         private LocationMode currentMode;
 14
 15         //定位客户端
 16
 17         private LocationClient locClient;
 18
 19         //定位图标
 20
 21         private Marker marker1;
 22
 23         //经纬度
 24
 25         private double latitude, longitude;
 26
 27      // 记录是否第一次定位
 28
 29        private boolean isFirstLoc = true;
 30
 31        //地图上添加的定位图标
 32
 33        BitmapDescriptor bitmap;
 34
 35        //定位监听器
 36
 37        //BDLocationListener locListener;
 38
 39     @Override
 40
 41 protected void onCreate(Bundle savedInstanceState) {
 42
 43     //保存之前Activity状态
 44
 45         super.onCreate(savedInstanceState);
 46
 47         // SDK初始化
 48
 49         SDKInitializer.initialize(getApplicationContext());
 50
 51 //设置android程序没有标题
 52
 53         requestWindowFeature(Window.FEATURE_NO_TITLE);
 54
 55 //显示布局界面
 56
 57         setContentView(R.layout.activity_main);
 58
 59 //获得显示地图的控件
 60
 61         mMapView = (MapView) findViewById(R.id.bmapview);
 62
 63          //tv_show=(TextView)findViewById(R.id.tv_show);
 64
 65   //在地图上显示的那个小图标
 66
 67        bitmap = BitmapDescriptorFactory
 68
 69               .fromResource(R.drawable.icon_marka);
 70
 71         init();
 72
 73     }
 74
 75 private void init() {
 76
 77     //定义地图状态
 78
 79     MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
 80
 81     //获得地图对象
 82
 83         bdMap = mMapView.getMap();
 84
 85         //LatLng cenpt=new LatLng(30.963175f,120.400244f);
 86
 87         //BDLocation location;
 88
 89         //latitude = location.getLatitude();
 90
 91        // LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude());
 92
 93 //        OverlayOptions options = new MarkerOptions()
 94
 95 //        .position(cenpt)
 96
 97 //        .icon(bitmap);
 98
 99 //        MapStatus mMapStatus=new MapStatus.Builder()
100
101 //        .target(cenpt)
102
103 //        .zoom(18)
104
105 //        .build();
106
107         //普通地图
108
109         bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
110
111        // MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus);
112
113        //设置地图初始状态
114
115         bdMap.setMapStatus(msu);
116
117         //bdMap.addOverlay(options);
118
119 //        bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL});
120
121 //        map.setCurrentCity("北京市");
122
123 //        map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18);
124
125        //当前定位模式为:普通
126
127         currentMode = LocationMode.NORMAL;
128
129         // 开启定位图层
130
131         bdMap.setMyLocationEnabled(true);
132
133         //定位服务的客户端
134
135         locClient = new LocationClient(this);
136
137         //注册监听函数
138
139         locClient.registerLocationListener(locListener);
140
141             //配置LocationClient这个定位客户端的定位参数
142
143             LocationClientOption option = new LocationClientOption();
144
145             option.setOpenGps(true);// 打开gps
146
147             option.setCoorType("bd09ll");// 设置坐标类型
148
149             option.setAddrType("all");//设置地址类型
150
151             option.setScanSpan(1000);//1s后定位
152
153             //配置客户端
154
155             locClient.setLocOption(option);
156
157             //启动定位(这一步很重要,不然前边注册的那个监听函数就没用了)
158
159             locClient.start();
160
161      }
162
163     //这个是就是定位的监听函数(获取定位坐标,在坐标上显示图标)
164
165     BDLocationListener locListener = new BDLocationListener(){
166
167      @Override
168
169      public void onReceiveLocation(BDLocation location) {
170
171       if (location == null ||  mMapView == null)
172
173             return ;
174
175            // 构造定位数据
176
177        MyLocationData locData = new MyLocationData.Builder()
178
179               .accuracy(location.getRadius())//
180
181               .direction(100)// 方向
182
183               .latitude(location.getLatitude())//
184
185               .longitude(location.getLongitude())//
186
187               .build();
188
189            // 获得经纬度
190
191            latitude = location.getLatitude();
192
193            longitude = location.getLongitude();
194
195            //设置定位数据
196
197            bdMap.setMyLocationData(locData);
198
199            // 第一次定位的时候,那地图中心店显示为定位到的位置
200
201            LatLng cenpt = new LatLng(latitude,longitude);
202
203            //定义覆盖物的坐标和使用的图标
204
205            OverlayOptions options = new MarkerOptions()
206
207             .position(cenpt)
208
209             .icon(bitmap);
210
211            //在地图上添加覆盖物
212
213            bdMap.addOverlay(options);
214
215            if (isFirstLoc) {
216
217               isFirstLoc = false;
218
219               LatLng ll = new LatLng(location.getLatitude(),
220
221                      location.getLongitude());
222
223            // MapStatusUpdate描述地图将要发生的变化
224
225        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
226
227            //更新地图状态
228
229               bdMap.animateMapStatus(msu);
230
231               // bdMap.setMyLocationEnabled(false);
232
233               //reverseGeoCode(cenpt);
234
235               //显示地址信息
236
237               Toast.makeText(getApplicationContext(), location.getAddrStr(),
238
239                      Toast.LENGTH_SHORT).show();
240
241                      }
242
243                   }
244
245        };
246
247     @Override
248
249     protected void onResume() {
250
251         super.onResume();
252
253         mMapView.onResume();
254
255     }
256
257     @Override
258
259     protected void onPause() {
260
261         super.onPause();
262
263         mMapView.onPause();
264
265     }
266
267     @Override
268
269     protected void onDestroy() {
270
271         mMapView.onDestroy();
272
273         mMapView = null;
274
275         super.onDestroy();
276
277     }
278
279
280
281 }

下图是定位显示的定位结果

源码下载:http://pan.baidu.com/s/1jGlP32Q

时间: 2024-08-11 05:45:47

android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)的相关文章

Android利用百度地图定位

百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map/com.example.map.MainActivity}: android.view.InflateException: Binary XML file line #11: Error i

android 通过百度地图定位获取坐标在导航地图上面显示,坐标发生偏移

private void initMap() { // 定位初始化 mLocClient = new LocationClient(this); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);// 打开gps option.setCoorType("bd09ll"); //

兔子--android中百度地图的开发

效果: API Key的申请地址:http://lbsyun.baidu.com/apiconsole/key 申请注意事项: 安全码:以下界面的SHA1  fingerprint值+;+包名 比如:72dem98dme;com.map ...........文件夹结构.................................. 代码: MainActivity.java package com.mybdmap; import android.app.Activity; import a

Android关于百度地图定位失败

警告信息:galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy 解决办法:在AndroidManifest.xml文件中添加以下代码 <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" &

android开发 百度地图 定位小圆点不在当前位置

注意经纬度要定义为全局变量,且此处不能直接使用location.getAttitude()和location.getLongitude 否则地图小圆点将显示在经纬度(0,0)位置.

Android使用百度地图出现闪退及定位时显示蓝屏问题

 目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题     1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="D9Lh8MrrLMUuXdWMU8tRLtDsta6PoaYN" /> 但是

Android学习个人笔记-百度地图定位sdk的使用

虽然自己已经完成了百度地图的调用,但是在使用过程中产生很多的疑问,在不断的百度各种大神的作品后才慢慢的调试出来,所以觉得作为新手自己应该把这个过程记录下来.尤其是自己在找到大神的文章时,并不能理解有些单纯一个方法和一个解释,主要还是水平有限,在查资料的过程中也深知写好一篇博文对于需要的人来说就是一汪泉水,欣喜的发现这篇博文讲的有头由尾,可以参照一步一步的来进行.记录下来这个过程对于自己也是一种复习,比如当初费尽心思解决的难题再一年后再去看代码却毫无头绪,所以这样的记录还是很有必要的,自己也尽力的

Android 百度地图定位(手动+自动) 安卓开发教程

近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究和咨询,找到了解决方案,在此备忘一下. 注意:定位使用真机才能够真正定位:模拟器的话,在DDMS中的Emulator Control中,选择Manual,下面单选按钮选择Decimal,然后填写经纬度,send后,再点击定位我的位置按钮,就能定位了(这应该算是固定定位,哈哈...). 1.第一步当然

Android百度地图定位

说到百度地图,现在这个时候应该都是众说周知了吧,多的话不扯了,直接奔向主题. 接入百度地图api必须申请key,这里申请key就不用说了,官方文档上面有介绍如何去申请key. 这里使用的百度地图定位是4.2的版本,api是3.1.1版本.如果申请好了key,那么就可以进入编码阶段了,具体实现如下: 1.引入百度地图相关jar包及armeabi目录到libs目录中 2.在项目的AndroidManifest.xml文件中配置相关信息 配置权限 <uses-permission android:na