0

我基本上是在使用我的 android 应用程序的位置进行测试。它目前所做的只是显示一些带有用户位置纬度和经度的 TextView。但是,我希望 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 可能尚未初始化”。无论如何我可以做到这一点吗?

4

3 回答 3

2

使 locationManager 成为类变量和最终变量,以便您可以从类中的任何位置引用它。

private final LocationManager locationManager;

然后在 onCreate 中定义它,如下所示:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



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);
}
于 2013-06-02T09:52:22.133 回答
0

使其成为类的私有字段,如下所示:

private LocationManager mLocationManager;
public void FindLocation(Context context){
    mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
...
}

现在,您可以从班级的任何地方访问 mLocationManager。

于 2013-06-02T09:50:33.927 回答
0

在我看来,您正在寻找的是在其方法之一中使用 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);
} 
于 2013-06-02T10:11:54.133 回答