我基本上测试使用我的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可能尚未初始化'。无论如何我能做到这一点吗?
答案 0 :(得分:2)
使locationManager成为一个类变量和final,这样你就可以从类中的任何地方引用它。
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);
}
答案 1 :(得分:0)
将它设为类的私有字段,如下所示:
private LocationManager mLocationManager;
public void FindLocation(Context context){
mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
...
}
现在您可以从班级的任何地方访问mLocationManager。
答案 2 :(得分: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);
}