原生定位 LocationManager

使用场景:

 只获取城市

原理:获取经纬度 然后像api请求,会返回城市。

百度

http://api.map.baidu.com/geocoder?output=json&location=39.913542,116.379763&ak=esNPFDwwsXWtsQfw4NMNmur1

json 数据

{
    "status":"OK",
    "result":{
        "location":{
            "lng":125.31699,
            "lat":43.813675
        },
        "formatted_address":"吉林省长春市南关区南四环路",
        "business":"幸福街,世界雕塑公园,明珠",
        "addressComponent":{
            "city":"长春市",
            "direction":"",
            "distance":"",
            "district":"南关区",
            "province":"吉林省",
            "street":"南四环路",
            "street_number":""
        },
        "cityCode":53
    }
}

1创建 根据上面的json 创建bean 对象

2 直接把下面代码赋值进去 (locationManager比较基础,去看别的博客比我写的好) 然后在 调用 getLocation()方法

(注意点 不要拿虚拟机测 位置不准)

权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
public void updateVersion(String wd, String jd) {
     
        String url="http://api.map.baidu.com/geocoder?output=json&location="+wd+","+jd+"&ak=esNPFDwwsXWtsQfw4NMNmur1";
        OkhttpManager.getAsync(url, new OkhttpManager.DataCallBack() {
            @Override
            public void requestFailure(Request request, Exception e) {

            }

            @Override
            public void requestSuccess(String result) {
                City city = JSON.parseObject(result, City.class);
                if (city.getStatus().equals("OK")) {
                           Log.d("地址为", city.getResult().getAddressComponent().getCity());
                         tv.setText(city.getResult().getFormatted_address());
                      }
            }
        });
//        OkHttpUtils
//                .get()
//                .url(path)
//                .build()
//                .execute(new StringCallback() {
//                    @Override
//                    public void onError(Call arg0, Exception arg1, int arg2) {
//                    }
//
//                    @Override
//                    public void onResponse(String arg0, int arg1) {
//                        Gson gson = new Gson();
//                        City response = gson.fromJson(arg0, City.class);
//                        CMLog.d(TAG, arg0);
//                        if (response.getStatus().equals("OK")) {
//                            CMLog.d("地址为", response.getResult().getAddressComponent().getCity());
//                        }
//                    }
//
//                });
    }


    public void getLocation() {
        String locationProvider;
        //获取地理位置管理器
        LocationManager locationManager = (LocationManager) con.getSystemService(Context.LOCATION_SERVICE);
        //获取所有可用的位置提供器
        List<String> providers = locationManager.getProviders(true);
        if (providers.contains(LocationManager.GPS_PROVIDER)) {
            //如果是GPS
            locationProvider = LocationManager.GPS_PROVIDER;
        } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
            //如果是Network
            locationProvider = LocationManager.NETWORK_PROVIDER;
        } else {
            Toast.makeText(con, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
            return;
        }
        //获取Location
        if (ActivityCompat.checkSelfPermission(con, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(con, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        Location location = locationManager.getLastKnownLocation(locationProvider);
        if (location != null) {
            //不为空,显示地理位置经纬度
            showLocation(location);
        }
        //监视地理位置变化
        locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
    }

    /**
     * 显示地理位置经度和纬度信息
     *
     * @param location
     */
    private void showLocation(Location location) {
        String locationStr = "纬度:" + location.getLatitude() + "\n"
                + "经度:" + location.getLongitude();
        Log.d("", "showLocation:------------------------ "+"纬度:" + location.getLatitude()+"经度:" + location.getLongitude());
        updateVersion(location.getLatitude() + "", location.getLongitude() + "");
    }

    /**
     * LocationListern监听器
     * 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
     */

    LocationListener locationListener = new LocationListener() {

        @Override
        public void onStatusChanged(String provider, int status, Bundle arg2) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }

        @Override
        public void onLocationChanged(Location location) {
            //如果位置发生变化,重新显示
            showLocation(location);
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值