通过百度地图API显示当前位置在地图上(图标显示)--第三方开源--百度地图(二)
1.下载百度地图的demo,下载地址:http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
2.把demo里面的BaiduMapsApiDemo解压,把BaiduMapsApiDemo文件夹里面的libs里面的所有文件都复制到自己的项目的libs里面
3.配置AndroidManifest.xml,把BaiduMapsApiDemo文件夹里面的AndroidManifest.xml有关百度地图要使用的配置信息复制到自己的AndroidManifest.xml里面
这是我配置好的例子的AndroidManifest.xml:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.zzw.baidumappoint" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="14" 9 android:targetSdkVersion="21" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name=".MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> 24 </activity> 25 26 <meta-data 27 android:name="com.baidu.lbsapi.API_KEY" 28 android:value="tpBieaHroLK1LeSkOQWLzq6A" /> 29 30 <service 31 android:name="com.baidu.location.f" 32 android:enabled="true" 33 android:process=":remote" > 34 </service> 35 </application> 36 37 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > 38 </uses-permission> 39 <uses-permission android:name="android.permission.INTERNET" > 40 </uses-permission> 41 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> 42 <uses-permission android:name="android.permission.WAKE_LOCK" > 43 </uses-permission> 44 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 45 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 46 <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> 47 <uses-permission android:name="android.permission.GET_TASKS" /> 48 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > 49 </uses-permission> 50 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 51 <!-- 这个权限用于进行网络定位 --> 52 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > 53 </uses-permission> 54 <!-- 这个权限用于访问GPS定位 --> 55 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > 56 </uses-permission> 57 <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> 58 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > 59 </uses-permission> 60 <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> 61 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > 62 </uses-permission> 63 <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> 64 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > 65 </uses-permission> 66 <!-- 用于读取手机当前的状态 --> 67 <uses-permission android:name="android.permission.READ_PHONE_STATE" > 68 </uses-permission> 69 <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> 70 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > 71 </uses-permission> 72 <!-- 访问网络,网络定位需要上网 --> 73 <uses-permission android:name="android.permission.INTERNET" /> 74 <!-- SD卡读取权限,用户写入离线定位数据 --> 75 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > 76 </uses-permission> 77 <!-- 允许应用读取低级别的系统日志文件 --> 78 <uses-permission android:name="android.permission.READ_LOGS" > 79 </uses-permission> 80 81 </manifest>
4.代码:
activity_main.xml:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context="com.zzw.baidumappoint.MainActivity" > 6 7 <com.baidu.mapapi.map.MapView 8 android:id="@+id/mapView" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" /> 11 12 </RelativeLayout>
MainActivity.java:
1 package com.zzw.baidumappoint; 2 3 import com.baidu.location.BDLocation; 4 import com.baidu.location.BDLocationListener; 5 import com.baidu.location.LocationClient; 6 import com.baidu.location.LocationClientOption; 7 import com.baidu.mapapi.SDKInitializer; 8 import com.baidu.mapapi.map.BaiduMap; 9 import com.baidu.mapapi.map.MapStatusUpdate; 10 import com.baidu.mapapi.map.MapStatusUpdateFactory; 11 import com.baidu.mapapi.map.MapView; 12 import com.baidu.mapapi.map.MyLocationData; 13 import com.baidu.mapapi.model.LatLng; 14 15 import android.app.Activity; 16 import android.os.Bundle; 17 18 public class MainActivity extends Activity { 19 20 private LocationClient mLocationClient; 21 private BaiduMap mBaiduMap; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 SDKInitializer.initialize(getApplicationContext());//是程序不崩溃的作用 27 setContentView(R.layout.activity_main); 28 29 // 获取LocationClient 30 mLocationClient = new LocationClient(this); 31 32 LocationClientOption option = new LocationClientOption(); 33 option.setCoorType("bd09ll"); 34 mLocationClient.setLocOption(option); 35 36 // 获取BaiduMap 37 MapView mapView = (MapView) findViewById(R.id.mapView); 38 mBaiduMap = mapView.getMap(); 39 40 // 显示出当前位置的小图标 41 mBaiduMap.setMyLocationEnabled(true); 42 43 MyLocationListener mListener = new MyLocationListener(); 44 mLocationClient.registerLocationListener(mListener); 45 mLocationClient.start(); 46 } 47 48 @Override 49 protected void onDestroy() { 50 mLocationClient.stop(); 51 super.onDestroy(); 52 } 53 54 private class MyLocationListener implements BDLocationListener { 55 56 @Override 57 public void onReceiveLocation(BDLocation location) { 58 59 // 只是完成了定位 60 MyLocationData locData = new MyLocationData.Builder().latitude(location.getLatitude()) 61 .longitude(location.getLongitude()).build(); 62 63 //设置图标在地图上的位置 64 mBaiduMap.setMyLocationData(locData); 65 66 // 开始移动百度地图的定位地点到中心位置 67 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); 68 MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 16.0f); 69 mBaiduMap.animateMapStatus(u); 70 } 71 72 } 73 74 }