首页 编程 软件学院 查看内容

Android 百度地图 定位 (一)

2015-10-23 11:29 4109 0

摘要: 1.下载地址:http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download官方文档:http://developer.baidu.com/map/index.php?title=android-locsdk2.配置:①key值的获取,在应用管 ...
关键词: android permission mLocationClientO Context LOCATION uses ption 定位 false mLocationClient

1.下载地址:http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download

官方文档:http://developer.baidu.com/map/index.php?title=android-locsdk

2.配置:

①key值的获取,在应用管理添加应用时根据提示填写即可,这里我只介绍安全码的获取。

安全码有三部分:Android签名的sha1 的值 + “;” + packageName 组成;

Android签名的sha1 值的获取有两种方式:

一、查看Eclipse获取,这个要求你的adt版本在22以上:

二、通过控制台获取,如图:

密匙库口令默认是android;

 

②把下面包复制到自己工程,如图:

      

③AndroidManifest.xml文件配置

一、权限:

<!-- 这个权限用于进行网络定位-->
<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>

注意: 定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 < uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

二、声明service组件,每个工程有单独的service,如下:

<service android:name="com.baidu.location.f" 
         android:enabled="true"        
         android:process=":remote">
</service>

三、添加标签:

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="key" />       //key:开发者申请的key

3.类介绍及相关代码:

package com.example.baidumapdemo;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import android.content.Context;
import android.widget.Toast;
public class BaiduMapLocationUtils implements BDLocationListener{
  private static LocationClient				mLocationClient;		//定位客户端
  private LocationClientOption				mLocationClientOption;	
  private Context							 context;
  private String								currentCity = null;		//当前所在城市
  private boolean							 isFirLoc	 = true;		//是否是第一次定位
  private static BaiduMapLocationUtils				mLocationUtils;
  private BaiduMapLocationUtils(Context context){
    init(context);
  }
  public static BaiduMapLocationUtils getInstance(Context context){
    if(mLocationUtils == null){
      mLocationUtils = new BaiduMapLocationUtils(context);
      mLocationClient.start();
    }
    return mLocationUtils;
  }
  /**
   * 初始化数据及定位相关
   * @param context
   */
  public void init(Context context){
    this.context = context;
    mLocationClient = new LocationClient(context);
    mLocationClient.registerLocationListener(this);
    mLocationClientOption = new LocationClientOption()
    mLocationClientOption.setCoorType("bd09ll");		//返回坐标类型
    mLocationClientOption.setScanSpan(1000 * 1);		//定位间隔时间
    mLocationClientOption.setAddrType("all");		  //是否需要地址信息,默认为false
   mLocationClientOption.SetIgnoreCacheException(false);			 //可选,默认false,设置是否收集CRASH信息,默认收集
    mLocationClientOption.setEnableSimulateGps(false);				 //可选,默认false,设置是否需要过滤gps仿真结果,默认需要
    mLocationClientOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
    mLocationClientOption.setOpenGps(true);//可选,默认false,设置是否使用gps
    mLocationClientOption.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
    mLocationClientOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京**附近”
    mLocationClientOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
    mLocationClientOption.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死

    mLocationClient.setLocOption(mLocationClientOption);
  }
  @Override
  public void onReceiveLocation(BDLocation location) {
      if(location == null || location.getCity() == null){
      if(isFirLoc){
        Toast.makeText(context, "定位失败,错误类型:" + BDLocation.TypeServerError, Toast.LENGTH_SHORT).show();
        isFirLoc = false;
      }
      return;
    }
    if((currentCity == null && location.getCity() != null) ||
       (location.getCity() != null && !location.getCity().equals(currentCity))){
      currentCity	 = location.getCity();
      Toast.makeText(context, "当前所在城市:" + currentCity, Toast.LENGTH_SHORT).show();
      return;
    }
  }
  public void onReceivePoi(BDLocation location) {
  }
  /**
   * 关闭定位功能
   */
  public void onStop(){
    mLocationClient.stop();
  }
}

在这里类里我仅封装了定位部分,配置完成之后在onCreate里直接调用即可实现定位功能,我会稍后介绍在地图上标记位置。

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部