Android 获取经纬度,地理位置,省市区

申请百度key:http://lbsyun.baidu.com/

 

Android 获取经纬度,地理位置,省市区_第1张图片

 

1、jar包下载地址:https://pan.baidu.com/s/1J-boj0ct9oJ8YjXMR8X4KA

下载并复制到libs下,Add As Library

 

如需获取SHA1值:https://blog.csdn.net/meixi_android/article/details/72547966

2、jar包复制到libs文件下,并Add As library

3、Java代码

 

static BDLocation lastLocation = null;
private LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();//自定义方法
    public class MyLocationListenner implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            if (location == null) {
                return;
            }
            if (lastLocation != null) {
                if (lastLocation.getLatitude() == location.getLatitude() && lastLocation.getLongitude() == location.getLongitude()) {
                    Log.d("map", "same location, skip refresh");
                    // mMapView.refresh(); //need this refresh?
                    return;
                }
            }
            String addrlg; //定位结果
            lastLocation = location;
            if (!TextUtils.isEmpty(lastLocation.getLocationDescribe())){
                addrlg = lastLocation.getLocationDescribe();
            }else if (lastLocation.hasAddr()) {
                addrlg = lastLocation.getAddrStr();
            }else {
                addrlg = "定位失败...";
                return;
            }
//            String city = lastLocation.getCity();
            double lat = lastLocation.getLatitude();
            double lot = lastLocation.getLongitude();
            ShareUtil.sharedPstring("nowla",String.valueOf(lat));
            ShareUtil.sharedPstring("nowlo",String.valueOf(lot));
            ShareUtil.sharedPstring("nowad",addrlg);
            Log.i("lgq","............"+addrlg+"........"+lat+"......."+lot);
//            Toast.makeText(MainActivity.this, addrlg+"........"+lat, Toast.LENGTH_SHORT).show();
//            tv_bottom_bar_me.setText(addrlg);
//            mBaiduMap.animateMapStatus(u);
        }
    }

 附:

 sb.append("\nlocType : ");// 定位类型
         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());
         sb.append("\nCountryCode : ");// 国家码
         sb.append(location.getCountryCode());
         sb.append("\nCountry : ");// 国家名称
         sb.append(location.getCountry());
         sb.append("\ncitycode : ");// 城市编码
         sb.append(location.getCityCode());
         sb.append("\ncity : ");// 城市
         sb.append(location.getCity());
         sb.append("\nDistrict : ");// 区
         sb.append(location.getDistrict());
         sb.append("\nStreet : ");// 街道
         sb.append(location.getStreet());
         sb.append("\naddr : ");// 地址信息
         sb.append(location.getAddrStr());
         sb.append("\nDirection(not all devices have value): ");
         sb.append(location.getDirection());// 方向
         sb.append("\nlocationdescribe: ");
         sb.append(location.getLocationDescribe());// 位置语义化信息
         sb.append("\nPoi: ");// POI信息
 

private void showMapWithLocationClient() {
    mLocClient = new LocationClient(this);
    mLocClient.registerLocationListener(myListener);

    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true);// open gps
    option.setCoorType("bd09ll");
    //可选,默认0,即仅定位一次,设置定时发起定位请求的间隔需要大于等于1000ms才是有效的
    /*
     * 定位sdk提供2种定位模式,定时定位和app主动请求定位。
     * setScanSpan < 1000 则为 app主动请求定位;
     * setScanSpan >=1000,则为定时定位模式(setScanSpan的值就是定时定位的时间间隔))
     * 定时定位模式中,定位sdk会按照app设定的时间定位进行位置更新,定时回调定位结果。此种定位模式适用于希望获得连续定位结果的情况。
     * 对于单次定位类应用,或者偶尔需要一下位置信息的app,可采用app主动请求定位这种模式。*/
    //option.setScanSpan(2000);
    //可选,设置是否需要地址信息,默认不需要
    option.setIsNeedAddress(true);
    //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
    option.setIsNeedLocationDescribe(true);
    //设置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到数据
    option.setIsNeedLocationPoiList(true);
    //在网络定位时,是否需要设备方向 true:需要 ; false:不需要
    option.setNeedDeviceDirect(true);
    //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
    option.setIgnoreKillProcess(false);
    //可选,默认false,设置是否收集CRASH信息,默认收集
    option.SetIgnoreCacheException(false);
    //可选,默认false,设置是否需要过滤gps仿真结果,默认需要
    option.setEnableSimulateGps(false);
    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
    mLocClient.setLocOption(option);

    mLocClient.start();
}

4、运行

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    showMapWithLocationClient();
}

权限

 









 6.0以上版本获取权限:https://blog.csdn.net/meixi_android/article/details/82114026

 

配置百度服务到manifest


配置key

 

 

谷歌API也可以实现啦:https://blog.csdn.net/meixi_android/article/details/84955589

你可能感兴趣的:(移动开发)