您的位置:首页 > 其它

我的工具太少了-百度地图定位功能!

2015-12-17 14:46 453 查看
1.为什么要写这个呢?
因为用的地方多啊,这个还用说!但网上的不是太老,就是太复杂了,包含很多不需要的东西!

2.本demo有哪些干货?

只有一个功能:就是定位,定位到当前城市!

1.第一步:当然是下载相关sdk啊,我只需要定位功能,不想做的太臃肿!如图:



下载下来大概只有372KB,解压出来后有一个jar文件,其他的都是各种处理器的.so文件,如果是eclipse:全部放在libs下面即可!

如果你和我一样使用的是Android Studio1.5正式版的话,就先要把jar包引入,再把.so文件引入~!

jar包引入大家都懂,.so文件引入不得不说Android Studio就要麻烦一些,需要在当前项目的build.gradle里面加入如下配置:

这就是第一步啦,下载sdk并引入相关jar和所有.so文件~!

2.第二步:得到appkey并配置



在百度开放平台的里面创建相关应用,完成后就可以得到key值了,

a.然后在application里面加入相关配置

<meta-data  
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="你得到的AK说" />
b.并加入相关权限

<!-- 这个权限用于进行网络定位 -->  
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
   <!-- 这个权限用于访问GPS定位 -->  
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
   <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->  
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
   <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->  
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
   <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->  
   <uses-permission android:name="android.permission.CHANGE_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.INTERNET" />  
   <!-- SD卡读取权限,用户写入离线定位数据 -->  
   <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
   <uses-permission android:name="android.permission.WRITE_SETTINGS" />


第二步,也就完成了,下面开始最后一步~!

3.第三步:写代码,我是单独提出来的一个类,用的时候实例化这个类并监听就可以得到相关定位信息了~! 代码如下:

package com.cq.cake.baidu;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

/**
 * Created by Small Cake on 2015/12/16.
 */
public  class MyBaiduLocation {
    private LocationClient client;// 百度定位客户端
    private LocationEndListener listener;
    private static MyBaiduLocation mBaiduLocation;

    private MyBaiduLocation(Context context){

        initBaiDuMapLocation(context);
    }

    /**
     * 获取实例
     * @return
     */
    public static MyBaiduLocation getInstance(Context context){
        if (mBaiduLocation!=null){
            return mBaiduLocation;
        }else{
            mBaiduLocation = new MyBaiduLocation(context);
            return mBaiduLocation;
        }

    }

    public interface LocationEndListener{
        void endLocation(BDLocation location);
    }
    public void setLocationEndListener(LocationEndListener listener){
        this.listener = listener;
    }
    /**
     * 百度地图定位
     */
    private void initBaiDuMapLocation(Context context) {
        //1.申明百度定位客户端
        client = new LocationClient(context.getApplicationContext());
        // 2.申明和注册监听函数
        client.registerLocationListener(new MyBDLocationListener());
        // 3.设置地图定位相关参数
        client.setLocOption(getLocationClientOption());
        // 4.开启客户端定位
        client.start();
    }

    class MyBDLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            if (listener!=null)
            listener.endLocation(location);
        }
    }
    /**
     * 获取地图定位相关参数
     *
     * @return LocationClientOption
     */
    private LocationClientOption getLocationClientOption() {
        LocationClientOption option = new LocationClientOption();
        // Hight_Accuracy高精度、Battery_Saving低功耗、Device_Sensors仅设备(GPS)
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置高精度定位模式
        option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
        option.setScanSpan(1000 * 60 * 10);// 设置的扫描间隔,单位是毫秒
        option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
        option.setAddrType("all");// String 值为 all时,表示返回地址信息,其他值都表示不返回地址信息。
        option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
        option.setOpenGps(true);// 设置打开GPS
        return option;
    }
}


到这里百度地图定位的使用就写完了,如何使用呢:在需要定位的Activity中加入如下代码:

MyBaiduLocation mLocation = MyBaiduLocation.getInstance(MainActivity.this);  
       mLocation.setLocationEndListener(new MyBaiduLocation.LocationEndListener() {  
           @Override  
           public void endLocation(BDLocation location) {  
               String mCity = location.getProvince();  
               itemCity.setTitle(mCity);  
               queryWeather(mCity);  
           }  
  
       });


mCity就是当前定位的城市啦,想获得更多信息,如坐标,具体位置等信息,从location里面获取就可以啦~!

其实也不复杂,就三步就可以实现定位功能的使用,官方文档还加入service什么的,对我没用,我只需要定位到当前城市就可以了!

希望对也是这个需求的同学有一点帮助,大家多多交流~!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: