我基本上是使用我的Android应用程序的位置进行测试。它当前所做的只是显示一些具有用户所在位置的经度和纬度的TextViews。但是,我希望的是让LocationListener在接收到位置后停止接收更新,而不是让它继续侦听更新。

public void updateLocation(Location location, Geocoder geocoder){
    TextView lat=(TextView)getView().findViewById(R.id.lat);
    TextView longt=(TextView)getView().findViewById(R.id.longt);
    double lata=location.getLatitude();
    double longa=location.getLongitude();
    lat.setText(Double.toString(location.getLatitude()));
    longt.setText(Double.toString(location.getLongitude()));
}

public void FindLocation(Context context){
    final LocationManager locationManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener(){
          public void onLocationChanged(Location location){
        updateLocation(location);}
          public void onStatusChanged(String provider, int status, Bundle extras) {}
          public void onProviderEnabled(String provider) {}
          public void onProviderDisabled(String provider) {}
      };
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}


应该在调用updateLocation()之后执行此操作,但是它不能引用locationManager或locationListener。在updateLocation()被调用为“无法在用不同方法定义的内部类中引用非最终变量locationListener”之后,我也无法在FindLocation()中调用它。但是,将final添加到locationListener只会产生错误“ locationListener可能尚未初始化”。无论如何,我能做到这一点吗?

最佳答案

在我看来,您正在寻找的是在其中一种方法中使用locationListener本身。您可以使用“ this”执行此操作。

public void FindLocation(Context context){
    final LocationManager locationManager (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener(){
        public void onLocationChanged(Location location){
            updateLocation(location);
            locationManager.removeUpdates(this);
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {}
        public void onProviderDisabled(String provider) {}
    };
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}

10-08 13:06