码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-11-21 18:19:41      阅读:2850      评论:0      收藏:0      [点我收藏+]

标签:

                            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

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

标签:

原文地址:http://www.cnblogs.com/gusseMe/p/4984280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!