1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.androidbaidumap" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="14" 9 android:targetSdkVersion="20" /> 10 11 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 12 <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 13 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 14 <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> 15 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 16 <uses-permission android:name="android.permission.INTERNET" /> 17 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> 18 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 19 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 20 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 21 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 22 <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 23 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 24 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 25 26 27 <application 28 android:allowBackup="true" 29 android:icon="@drawable/ic_launcher" 30 android:label="@string/app_name" 31 android:theme="@style/AppTheme" > 32 <meta-data 33 android:name="com.baidu.lbsapi.API_KEY" 34 android:value="***********" /> 35 36 <activity 37 android:name=".MainActivity" 38 android:label="@string/app_name" > 39 <intent-filter> 40 <action android:name="android.intent.action.MAIN" /> 41 42 <category android:name="android.intent.category.LAUNCHER" /> 43 </intent-filter> 44 </activity> 45 </application> 46 47 </manifest>
1 package com.example.androidbaidumap; 2 3 import java.util.List; 4 5 import com.baidu.mapapi.SDKInitializer; 6 import com.baidu.mapapi.map.BaiduMap; 7 import com.baidu.mapapi.map.MapStatusUpdate; 8 import com.baidu.mapapi.map.MapStatusUpdateFactory; 9 import com.baidu.mapapi.map.MapView; 10 import com.baidu.mapapi.map.MyLocationData; 11 import com.baidu.mapapi.model.LatLng; 12 13 import android.app.Activity; 14 import android.content.Context; 15 import android.location.Location; 16 import android.location.LocationListener; 17 import android.location.LocationManager; 18 import android.os.Bundle; 19 import android.util.Log; 20 import android.widget.Toast; 21 22 public class MainActivity extends Activity { 23 private MapView mapView; 24 //总控制器 25 private BaiduMap baiduMap; 26 //位置管理器 27 private LocationManager locationManager; 28 //位置提供器 29 private String provider; 30 //标志符 31 private boolean isFirstLocate=true; 32 @Override 33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 SDKInitializer.initialize(getApplicationContext()); 36 setContentView(R.layout.activity_main); 37 mapView=(MapView)findViewById(R.id.map_view); 38 baiduMap=mapView.getMap(); 39 //开启显示个人位置功能 40 baiduMap.setMyLocationEnabled(true); 41 locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE); 42 //获取所有的位置提供器 43 List<String> list=locationManager.getProviders(true); 44 if(list.contains(LocationManager.GPS_PROVIDER)){ 45 provider=LocationManager.GPS_PROVIDER; 46 }else if(list.contains(LocationManager.NETWORK_PROVIDER)){ 47 provider=LocationManager.NETWORK_PROVIDER; 48 }else{ 49 //提示用户无可用的 50 Toast.makeText(this, "没用可用的定位设置,请确定你已经开启GPS或网络", Toast.LENGTH_SHORT).show(); 51 return; 52 } 53 Location location=locationManager.getLastKnownLocation(provider); 54 if(location!=null){ 55 showLocation(location); 56 } 57 locationManager.requestLocationUpdates(provider, 6000, 1, locationListener); 58 59 } 60 private void showLocation(Location location) { 61 if(isFirstLocate){ 62 LatLng ll=new LatLng(location.getLatitude(), location.getLongitude()); 63 //获取MapStatusUpdate对象 64 //封装地理位置 65 MapStatusUpdate update=MapStatusUpdateFactory.newLatLng(ll); 66 baiduMap.animateMapStatus(update); 67 //设置精度 68 update=MapStatusUpdateFactory.zoomTo(16f); 69 baiduMap.animateMapStatus(update); 70 isFirstLocate=false; 71 72 } 73 //封装个人所在位置 74 MyLocationData.Builder locationBuilder=new MyLocationData.Builder(); 75 locationBuilder.latitude(location.getLatitude()); 76 locationBuilder.longitude(location.getLongitude()); 77 MyLocationData locationData=locationBuilder.build(); 78 baiduMap.setMyLocationData(locationData); 79 80 } 81 private LocationListener locationListener=new LocationListener(){ 82 83 @Override 84 public void onLocationChanged(Location location) { 85 // TODO Auto-generated method stub 86 if(location!=null){ 87 showLocation(location); 88 Log.i("baidumap", "update"); 89 } 90 } 91 92 @Override 93 public void onStatusChanged(String provider, int status, Bundle extras) { 94 // TODO Auto-generated method stub 95 96 } 97 98 @Override 99 public void onProviderEnabled(String provider) { 100 // TODO Auto-generated method stub 101 102 } 103 104 @Override 105 public void onProviderDisabled(String provider) { 106 // TODO Auto-generated method stub 107 108 }}; 109 @Override 110 protected void onDestroy() { 111 // TODO Auto-generated method stub 112 super.onDestroy(); 113 baiduMap.setMyLocationEnabled(false); 114 mapView.onDestroy(); 115 if(locationManager!=null){ 116 locationManager.removeUpdates(locationListener); 117 } 118 } 119 @Override 120 protected void onPause() { 121 // TODO Auto-generated method stub 122 super.onPause(); 123 mapView.onPause(); 124 } 125 @Override 126 protected void onResume() { 127 // TODO Auto-generated method stub 128 super.onResume(); 129 mapView.onResume(); 130 } 131 132 }
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
在相关下载里下载最新的库文件。将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提高程序兼容性),将locSDK_6.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了。
使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:
sourceSets {
main {
jniLibs.srcDirs = ['libs'] } }
开发者如果开发的是系统应用,则只在工程中配置SO还是不够的,还需要手动把对应架构的SO拷贝到/system/lib下,如果是64位系统的话需要将64位的SO拷贝到/sytem/lib64下。
注意:每次新版本的定位SDK,开发者除了要更新JAR包之外,也要注意一下SO有无更新,如果SO名称不一样了,也要及时替换老的SO版本,不然会导致定位失败!
设置AndroidManifest.xml
在application标签中声明service组件,每个app拥有自己单独的定位service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
【重要提醒】
定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>
声明使用权限
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
设置AcessKey
SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。
设置AccessKey,在application标签中加入
<meta-data
android:name="com.baidu.lbsapi.API_KEY" android:value="key" /> //key:开发者申请的key
import相关类
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类 import com.baidu.location.Poi;
。