android之城市定位

        先实现LocationListener接口 会重写四个方法
    @Override
    public void onLocationChanged(@NonNull Location location) {

      
    }

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

    }

    @Override
    public void onProviderEnabled(@NonNull String provider) {

    }

    @Override
    public void onProviderDisabled(@NonNull String provider) {

    }

        写一个判断是否打开定位的方法,如果没有开启定位 则跳转到定位页面手动开定位

    private void checkIsOpen() {
        locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (!isOpen) {
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivityForResult(intent, 0);
        }
        startLocation();
    }

        然后开始GPS定位,第一个参数填“gps“,后面两个参数是每次更新的时长和定位距离的误差

记得开权限,

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

        如果用的Android Studio 会提示你添加权限,点了就会自动添加,然后它还会再提示你一个检查的东西,还是点击添加即可。

  private void startLocation() {
        locationManager.requestLocationUpdates("gps", 2000, 10, this);
    }

        然后开始在onLocationChanged方法里写获取定位的经纬度,城市信息。

  public void onLocationChanged(@NonNull Location location) {

        lat = location.getLatitude();
        lng = location.getLongitude();

        List<Address> list = null;
        Geocoder gd = new Geocoder(getActivity());

        try {
            list= gd.getFromLocation(lat, lng, 2);
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (list != null && list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                Address address = list.get(i);
                cityHome = address.getLocality();
            }
            top_city.setText(cityHome);
            putSp();
        }

    }

         最后可以写一个SharedPreferences保存位置信息,下次登录时候直接获取上次保存的定位信息就不用再开定位了,这里可以加一个判断,如果获取信息失败则开启定位重新定位。

   private void putSp() {
        editor = getActivity().getSharedPreferences("dp", Context.MODE_PRIVATE).edit();
        editor.putString("cityHome", cityHome);
        editor.apply();
    }
    private String getSp() {
        return  getActivity().getSharedPreferences("dp", Context.MODE_PRIVATE).getString("cityHome", "获取失败");

    }

        初始化开始,如果没有上次定位信息,则开始执行开启定位和判断更新位置信息。 

   @Override
    public void onStart() {
        super.onStart();
        if (getSp().equals("获取失败")) {
            checkIsOpen();
        }
    }

 

         

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值