我基本上是使用我的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);
}