-2

Android 앱을 개발 중이며 앱을 실행하자마자 사용자의 현재 위치를 검색하고 싶습니다.앱이 처음 시작될 때 getLastLocation() 메소드가 위치를 검색하지 않는 이유는 무엇입니까?

이 코드를 사용하고 있습니다 : 나는 위치가 감지되지 않을 때 팝업과 "RETRY"버튼이있는 Snackbar을 사용하고

@Override 
    public void onConnected(@Nullable Bundle bundle) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mLastLocation != null) { 
      currentLatDouble = mLastLocation.getLatitude(); 
      currentLngDouble = mLastLocation.getLongitude(); 
     } 
    } 

. "RETRY"버튼을 누르면 위의 코드가 다시 실행되며 이번에는 위치가 검색됩니다.

내가 원하는 것은 응용 프로그램을 시작하자마자 위치를 검색하고 싶습니다.

알려 주시기 바랍니다.

+0

aswer는 평소와 같이 ... getLastLocation이 null을 반환 할 수 있기 때문에 ... – Selvin

+0

@Selvin 왜 앱이 시작될 때마다 null이 반환되고 두 번째 시도가 아닌가? –

+0

장치가 어떤 위치를 얻고 마지막으로 알려진 위치로 설정할 시간이 될 수 있습니다. –

답변

0

LocationServices.FusedLocationApi.getLastLocation 메서드는 아직 마지막으로 알려진 위치가없는 경우 null을 반환 할 수 있습니다. 수신 된 위치

public class MainActivity extends ActionBarActivity implements LocationListener { 
... 
@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 
} 

것은 확인을 처리합니다

@Override 
public void onConnected(Bundle connectionHint) { 
    ... 
    if (mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

protected void startLocationUpdates() { 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 

그리고하여 LocationListener을 :

가장 좋은 사용은 다음과 같이 위치 업데이트를 요청하고 onLocationChanged 콜백의 응답을 처리하는 것입니다 documentations을 확인하십시오. 이 answer도 도움이 될 수 있습니다.

+0

이유는 모르겠지만 위치가 앱 실행시 검색되지 않고 두 번째 시도에서 검색 중입니다! –

+0

앱을 실행하면 마지막 위치에 대한 요청이 위치 정보를 얻을 수 있기 때문입니다. 서브 시퀀스 시도에서, 약간의 수정을 할 충분한 시간이 있습니다. init 다음에 재시도 작업을 넣으면이 두 번째 호출에서 여전히 위치가 유지되지 않습니다. 가장 좋은 방법은 위치를 요청하는 것이며 장치가 위치를 얻 자마자이를 최초의 알려진 위치로 간주합니다. –