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“,后面两个参数是每次更新的时长和定位距离的误差

记得开权限,

    

        如果用的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
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();
        }
    }

 

         

你可能感兴趣的:(androidNote,android)