기본적으로 안드로이드 애플 리케이션의 위치를 사용하여 테스트하고 있습니다. 현재 사용자 위치의 위도와 경도를 나타내는 일부 TextView가 표시됩니다. 그러나 LocationListener가 업데이트 수신을 계속하지 않고 Location 수신자가 위치를 수신 한 후에 업데이트 수신을 중지하기를 원합니다.다른 메서드의 로컬 객체에 액세스
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가 초기화되지 않았을 수 있습니다.'오류 만 발생합니다. 어쨌든 내가 이걸 이룰 수 있니?
Aaaarrrhhhhhgggg. 내 눈이 그들의 소켓에서 떨어지고있다. 내 코가 녹고 내 개가 울부 짖고있다. "전 지구 적"질병은 여전히 여기 있습니다. 이것은 전역 변수가 아니며 정의 상 범위와 수명이 응용 프로그램과 동일합니다. 이것은 클래스 필드 (또는 클래스 변수)입니다. -1 당신이 고칠 때까지. 수업 분야가 세계적이라는 것을 어디에서 알게 되었습니까? 누구든지 뾰족한 것을 삽입 할 수 있도록 말해주세요! – Simon
하하, 실리콘 밸리에서 새벽 3시에 나를 응원 해 주셔서 감사합니다. 결정된! :) – kushyar
다른 의견에서 언급 한 것처럼 더 나은 접근 방식이거나 locationManager.removeUpdates (this)를 사용 하시겠습니까? – cortex