美文网首页
Android百度地图——定位

Android百度地图——定位

作者: 王家宇 | 来源:发表于2016-05-31 12:47 被阅读1165次

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

    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。

    相关文章

      网友评论

          本文标题:Android百度地图——定位

          本文链接:https://www.haomeiwen.com/subject/rptqdttx.html