사용자 위도와 경도를 검색하는 클래스 개체가 있습니다. 여기위도와 경도로 0.0을 반환하는 Android 사용자 위치
userLocation = new UserLocation(this);
클래스 조각입니다 : 내 UI 스레드에서 나는이 작업을 생성에서 onCreate 메소드에서 객체 생성 버튼을 누를 때, 이제 다시 메인 스레드에서
public UserLocation(Context mContext) {
//Pass parameter to class field:
this.mContext = mContext;
//Fetch the user's location:
fetchUserLocation();
}
public void fetchUserLocation() {
// Acquire a reference to the system Location Manager:
LocationManager locationManager = (LocationManager)this.mContext.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates:
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//Manage the data recieved:
makeUseOfLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
private void makeUseOfLocation(Location location) {
//Split the data of the location object:
userLatitude = location.getLatitude();
userLongitude = location.getLongitude();
}
/**
* @return userLatitude
*/
public double getLatitude() {
return userLatitude;
}
/**
* @return userLongitude
*/
public double getLongitude() {
return userLongitude;
}
을, 위도와 경도가 수집 : 내가 바로 그 버튼을 누르면
// GET THE LATITUDE AND LONGITUDE OF THE USER:
currentLatitude = userLocation.getLatitude();
currentLongitude = userLocation.getLongitude();
지금 말을 위해 나는 응용 프로그램을 실행,받은 값은 위도와 경도 모두 0.0이다.
그러나 애플리케이션을 실행하고 4-5 초 정도 기다렸다가 버튼을 누르면 올바른 값이 수신됩니다.
누구든지이 동작의 원인을 알 수 있습니까?
필드가 null 인 경우 사용자가 응용 프로그램을 시작할 때 위도와 경도를 수집하는 메서드를 작성했을 때 알게되었습니다. 그럼 이것은 다시 0.0 값을 반환합니다.
감사합니다.
좋습니다. 일단 UI 클래스에 refrence를 전달하고 onLocationChanged가 호출되면 해당 데이터를 처리하는 메서드를 호출하면 작동 할 수 있습니다. 유일한 문제는 위치가 변경 될 때마다 전화를 거는 것입니다. 사용자가 버튼을 누를 때만 업데이트 된 정보 만 원한다면 해결 방법을 알고 계십니까? –
@VesicaPiscis : 솔직히 말해서, 당신이 무엇을 의미하는지 모르겠습니다. 그러나 사용자가 버튼을 클릭 할 때까지 기다려야하는 정보 * 또는 *를 듣고 싶을 때처럼 들리는 것처럼 들리지만, 다시 전화 할 때 UI * (및 구독 취소) 만 업데이트하면됩니다. 앱에 대해 더 많이 알지 못하면 어느 것이 가장 적절한 지 말하기 어렵습니다. 위치 업데이트의 비동기 특성을 앱에 통합하는 방법을 생각하면됩니다. –