说明:
1.初始化 BaiduMap SDK要在显示界面之前,即:
SDKInitializer.initialize(Context);
setContentView(R.layout.main);
2. 设置定位的模式是 LocationMode.Hight_Accuracy 时,在室内可能无法获取到准确的经纬度,会得到默认的值是4.9E-324
处理办法是将模式改为Battery_Saving,或到室外
3.可以根据当前设备网络连接情况和GPS是否开启来设定定位模式
//获得网络连接情况
ConnectivityManager cManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cManager.getActiveNetworkInfo();
//获取GPS的连接情况
LocationManager lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(lManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, "GPS已开启", 0).show();
}
4.使用经纬度要在public void onReceiveLocation(BDLocation loc) {}方法中操作
步骤一:导入百度定位SDK包
第二部:在AndroidManifest.xml清单文件中添加访问权限和服务等,代码如下:
class="code_img_closed" src="/Upload/Images/2014111900/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('bbe2606e-778e-4c15-b197-8107e0b81f32',event)" src="/Upload/Images/2014111900/2B1B950FA3DF188F.gif" alt="" />1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.qf.location" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="18" /> 10 11 <!-- 添加的内容 1 (访问权限) --> 12 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 13 <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 14 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 15 <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> 16 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 17 <uses-permission android:name="android.permission.INTERNET" /> 18 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> 19 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 20 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 21 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 22 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 23 <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 24 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 25 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 26 <!-- 这个权限用于进行网络定位 --> 27 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > 28 </uses-permission> 29 <!-- 这个权限用于访问GPS定位 --> 30 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > 31 </uses-permission> 32 <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> 33 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > 34 </uses-permission> 35 <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> 36 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > 37 </uses-permission> 38 <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> 39 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > 40 </uses-permission> 41 <!-- 用于读取手机当前的状态 --> 42 <uses-permission android:name="android.permission.READ_PHONE_STATE" > 43 </uses-permission> 44 <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> 45 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > 46 </uses-permission> 47 <!-- 访问网络,网络定位需要上网 --> 48 <uses-permission android:name="android.permission.INTERNET" /> 49 <!-- SD卡读取权限,用户写入离线定位数据 --> 50 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > 51 </uses-permission> 52 <!-- 允许应用读取低级别的系统日志文件 --> 53 <uses-permission android:name="android.permission.READ_LOGS" > 54 </uses-permission> 55 56 <application 57 android:allowBackup="true" 58 android:icon="@drawable/ic_launcher" 59 android:label="@string/app_name" 60 android:theme="@style/AppTheme" > 61 <activity 62 android:name="com.qf.location.MainActivity" 63 android:label="@string/app_name" > 64 <intent-filter> 65 <action android:name="android.intent.action.MAIN" /> 66 67 <category android:name="android.intent.category.LAUNCHER" /> 68 </intent-filter> 69 </activity> 70 71 <!-- 添加的内容 2 --> 72 <meta-data 73 android:name="com.baidu.lbsapi.API_KEY" 74 android:value="Dt7Q30nVQMKbM3NT6GHnRnGq" /> 75 76 <service 77 android:name="com.baidu.location.f" 78 android:enabled="true" 79 android:process=":remote" > 80 </service> 81 </application> 82 83 </manifest>View Code
第三步: 申请 百度地图开发密钥:在上步中显示的<meta_data >标签的value属性上设置
第四步:写代码获取当前位置经纬度:代码如下:
1 private LocationClient locClient; 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 //显示界面之前初始化 BaiduMap SDK 8 SDKInitializer.initialize(getApplicationContext()); 9 setContentView(R.layout.activity_main); 10 11 12 getLocation(); 13 } 14 15 16 //获取手机当前所在位置的经纬度 17 public void getLocation(){ 18 //实例化位置客户端 19 locClient = new LocationClient(getApplicationContext()); 20 //创建一个位置option对象 21 LocationClientOption locOption = new LocationClientOption(); 22 23 //设置option的属性 24 locOption.setCoorType("bd09II"); // bd09II表示返回的结果是百度的经纬度 25 locOption.setIsNeedAddress(true); //返回的信息包含当前的地址 26 locOption.setNeedDeviceDirect(true); //返回的内容包含手机机头的方向 27 locOption.setScanSpan(5000); //每5秒发起一次定位请求 28 locOption.setLocationMode(LocationMode.Hight_Accuracy); //高精度模式,网络和GPS 29 30 31 //将封装的参数设置到位置客户端 32 locClient.setLocOption(locOption); 33 34 //给位置客户端注册位置监听器 35 locClient.registerLocationListener(new BDLocationListener() { 36 37 @Override 38 public void onReceiveLocation(BDLocation loc) { 39 double latitude = loc.getLatitude(); 40 double longitude = loc.getLongitude(); 41 Toast.makeText(getApplicationContext(), latitude+":"+longitude, 0).show(); 42 43 /*================================此处定义接口=====================*/ 44 45 } 46 }); 47 48 //启动位置客户端 49 locClient.start(); 50 51 }View Code