Android百度地图——定位

为了方便使用,我把百度地图定位功能再做一次封装。使用方法如下:

BaiduLocation.getLocation(activity);
BaiduLocation.setMyLocationListener(new BaiduLocation.MyLocationListener(){
  public void myLocatin(double mylongitude,double mylatitude){
  
  }
});

封装后的百度定位类BaiduLocation:

import android.content.Context;
import android.util.Log;

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

/**
 * 百度定位 用法: BaiduLocation.getLocation(activity);
 * BaiduLocation.setMyLocationListener(new BaiduLocation.MyLocationListener(){
 * public void myLocatin(double mylongitude,double mylatitude){
 * 
 * } });
 * 
 * <!-- 百度定位回调 -->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>
        
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />   
    <!-- 这个权限用于进行网络定位 -->
    <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.CHANGE_WIFI_STATE" >
 * @author 王家宇  2016.1.15
 *
 */
public class BaiduLocation {
    /**
     * 经度
     * 
     */
    public static double mylongitude = -1.0;
    /**
     * 纬度
     * 
     */
    public static double mylatitude = -1.0;

    /**
     * 城市
     */
    public static String myCity = null;

    /**
     * 街道
     */
    public static String myCityadd = null;

    /**
     * 回调经纬度方法
     * 
     * @param myLocationListener
     */
    public static void setMyLocationListener(MyLocationListener myLocationListener) {
        BaiduLocation.myLocationListener = myLocationListener;
    }

    public static MyLocationListener myLocationListener;

    /**
     * 回调经纬度的接口定义
     * 
     * @author Administrator
     *
     */
    public static interface MyLocationListener {
        public void myLocatin(double mylongitude, double mylatitude, String city, String street);
    };

    /**
     * 获取当前经纬度
     * 
     * @param activity
     */
    public static void getLocation(Context context) {
        
        final LocationClient locationClient = new LocationClient(context);

        // 设置定位条件

        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 是否打开GPS
        option.setCoorType("bd09ll"); // 设置返回值的坐标类型。
        option.setPriority(LocationClientOption.NetWorkFirst); // 设置定位优先级
        option.setProdName("zhongchengbus"); // 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
        option.setScanSpan(5000); // 设置定时定位的时间间隔。单位毫秒
        option.setAddrType("all");// 显示所有信息,街道
        locationClient.setLocOption(option);
        // 注册位置监听器
        locationClient.registerLocationListener(new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation location) {
                // TODO Auto-generated method stub
                if (location == null) {
                    return;
                }
                Log.d("baidulocation", "baidulocation1");
                // sb.append("Time : ");
                // sb.append(location.getTime());
                // sb.append("\nError code : ");
                // sb.append(location.getLocType());
                // sb.append("\nLatitude : ");
                // sb.append(location.getLatitude());
                // sb.append("\nLontitude : ");
                // sb.append(location.getLongitude());
                // sb.append("\nRadius : ");
                // sb.append(location.getRadius());
                // if (location.getLocType() == BDLocation.TypeGpsLocation){
                // sb.append("\nSpeed : ");
                // sb.append(location.getSpeed());
                // sb.append("\nSatellite : ");
                // sb.append(location.getSatelliteNumber());
                // } else
                if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                    // sb.append("\nAddress : ");
                    // sb.append(location.getAddrStr());
                    String district = location.getAddress().district;
                    myCityadd = location.getAddrStr();
                    myCity = location.getCity();
                    mylongitude = location.getLongitude();
                    mylatitude = location.getLatitude();
                    Log.d("baidulocation", mylongitude+"\n"+mylatitude+"\n"+ myCity+"\n"+district);
                    // 经纬度
                    if (myLocationListener != null) {
                        myLocationListener.myLocatin(mylongitude, mylatitude, myCity, district);
                        locationClient.stop();
                    }
                }
            }

        });

        locationClient.start();
        /*
         * 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。调用requestLocation(
         * )后,每隔设定的时间,定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,
         * 返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
         * 定时定位时,调用一次requestLocation,会定时监听到定位结果。
         */
        locationClient.requestLocation();
        Log.d("baidulocation", "baidulocation");
    }
}

注意添加权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />   
    <!-- 这个权限用于进行网络定位 -->
    <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.CHANGE_WIFI_STATE" >

百度定位回调service

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

注意的是仅仅使用定位功能不需要key。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容