1

현재 위치를 얻고 그 후에 다음 코드를 수행해야합니다. 이 방법이 끝나면 어떻게 기다릴 수 있습니까? onLocationChanged가 자동으로 호출되어 문제가 발생하는 이유는 무엇입니까? 누군가가 그것을 어떻게 더 정확하게 할 수있는 아이디어가 있습니까? 나는 매우 어리 석다. OnLocationChanged()에 나는 onResume()라고 부른다. 그러나 그것은 매우 나쁜 생각이다.대기 onLocationChanged (위치 위치)

+1

onResume을 호출하면 안됩니다. 위치가 바뀌면 어떻게되고 싶습니까? – ditkin

+0

거기에서 좌표를 가져와 onResume()에서 작업해야합니다. –

답변

2

AsyncTask을 사용하는 것이 좋습니다. 대답은 Android find GPS location once, show loading dialog을 참조하십시오. 기본적으로 onPreExecute에서 대화 상자를 시작할 수 있습니다 (doInBackground이 호출되기 전에 시작됩니다). 그것은 당신이 위치 할 수 있고 대화를 보여주는 시간까지 기다리는 것을 의미합니다. 그러면 doInBackground에서 위치를 얻을 수 있습니다. 끝나면 onPostExecute이 호출됩니다. 당신은 안으로 들어올 수있다 onPostExecute. 위치가 null이 아닌지 확인한 다음 원하는 경우 onPostExecute 내부에서 다른 함수를 호출 할 수 있습니다.

이것은 편도 일 수 있습니다. AsyncTask Android example에서 기본 예제를 배울 수 있습니다. 또한 설명서 here을 읽고 How to Get GPS Location Using AsyncTask?을 읽어보십시오.

일부 다른 유사한 유용한 질문 :이 도움이

Wait for current location - GPS - Android Dev

getting location instantly in android

희망.

+0

AsyncTask를 배워야한다고 생각하지만 지금은 더 간단한 해결책은 무엇입니까? –

+0

언젠가는 당신이 도움이 될 것이라고 생각합니다. 그것은 곧장 앞으로입니다. 기본 함수 doInBackground, onPreExecute 및 onPostExecute로 시작하려고 할 수 있습니다. onPreExecute는 백그라운드 프로세스를 시작하기 직전에 호출됩니다. doInBackground 내부의 것들은 백그라운드 스레드에서 실행됩니다. onPostExecute는 백그라운드 프로세스 후에 실행됩니다. –

+0

Ok, but 1. onLocationChange() 스레드가 실행중인 위치와 시작 위치. 2이 메소드가 시스템에서 호출하는 경우 백그라운드에서 onLocationChange()를 어떻게 수행 할 수 있습니까? –

0

나는 OP가 위의 대답을 받아 들였지만 나는 OP가 더 간단한 대답을 원한다고 느꼈다.

나는 OP에 Activity가있는 안드로이드 응용 프로그램이 있다고 가정합니다. 나는 이렇게 선언했다.

public class HelloAndroidActivity extends Activity implements LocationListener { 

OP는 수명주기 방법의 작동 방식과 작업을 혼동했다. 내 이력서 및 일시 정지 방법은 다음과 같을 것이다 : 내 onResume 위치 업데이트와 onPause 방법이 있습니다 때 통지 할 것을 요청

@Override 
protected void onPause() { 
    ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); 
    super.onPause(); 
} 

@Override 
protected void onResume() { 
    ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 1000, 1, this); 
    super.onResume(); 
} 

공지 사항 난 더 이상 통지되지 않을 것을 요구한다. 필요한 시간보다 작은 시간 간격으로 업데이트를 요청하지 않도록 조심해야합니다. 그렇지 않으면 배터리가 소모됩니다. 활동이 LocationListener를 구현하기

내 onLocationChanged 방법은 다음과 같습니다

@Override 
public void onLocationChanged(Location location) { 
    // Update the location fields 
    ((EditText)findViewById(R.id.latField)).setText(Double.toString(location.getLatitude())); 
    ((EditText)findViewById(R.id.longField)).setText(Double.toString(location.getLongitude())); 
} 

이 단순히 새로운 위치를 받아 내 활동에있는 일부 텍스트의 EditText 필드를 업데이트합니다.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

그래서 위치 관리자 및 위치 서비스를 사용하여 시작하는 방법을 묻는다면 이것은 내가 시작하는 것이 방법이 될 것입니다 : 내가 할 필요가있는 유일한 다른 것은 내 매니페스트에 GPS 권한을 추가하는 것이 었습니다. 나는 받아 들인 대답에서 무엇이든 벗어나려는 것이 아니며, onResume과 onLocationMethodChanged 메소드에서 무엇을해야하는지에 대한 근본적인 오해가 있다고 생각합니다.