저는 서비스와 활동으로 구성된 앱을 만들고 있습니다. 이 서비스는 LocationClient 객체를 사용하여 매시간 을 요청합니다.. 액티비티는 다른 LocationClient 객체를 사용하여 버튼을 클릭 한 후 단일 현재 위치 을 요청합니다. 서비스에서여러 위치 클라이언트가 간섭하고 있습니까?
:
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(60000);
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);
활동에서 :
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(0); // 0 should be ok since only a single location is requested
mLocationRequest.setFastestInterval(0);
mLocationRequest.setNumUpdates(1); // get only a single location
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);
예상처럼 서비스 혼자 작동합니다.
그러나 서비스가 시작되고 활동이 단일 현재 위치를 얻으려고하면 서비스가 업데이트 된 위치를 수신 할 때까지 위치를 수신하지 않습니다. 따라서 활동은 최대 60 초를 기다려야합니다.
이 시작되지 않은 경우이 시작되고 활동이 단일 현재 위치를 얻으려고하면 잠시 후 예상대로 위치를 수신합니다 (일반적으로 < 5 초).
무엇이 문제의 원인입니까? 앱 당 하나의 LocationListener 만 허용됩니까?
타이밍이 보장되지 않는다는 것을 알고 있습니다.;-)하지만 문서를 올바르게 이해하면 위치 서비스는 등록 된 LocationRequests가 제공 한 가능한 가장 작은 간격을 사용하려고 시도합니다. 내 경우에는 이것이 서비스 중 하나가 아니라 서비스 중 하나입니다. 다른 예 : "My tracks"이 백그라운드에서 매 순간 위치를 추적하는 경우 내 활동은 "My tracks"의 내부를 모른 채로 훨씬 빠르게 (~ 3 초) 현재 위치를 훨씬 빠르게 얻을 수 있습니다. 그러나 내 활동 위의 두 LocationClients를 사용하면 항상 서비스가 설정 한 시간을 기다리고 있습니다. – Biggie
설명서에 "이 방법은 앱이 위치 업데이트를받는 데 걸리는 시간을 밀리 초 단위로 설정합니다. 다른 위치 정보 서비스에서 업데이트를 수신하는 앱이없는 경우이 속도로 업데이트가 전송됩니다." 문서는 "app"에 대한 것이지 "LocationClient/LocationListener-object"에 관한 것은 아닙니다. 그래서 동일한 앱에 여러 LocationClient가있는 문제에 대해 질문했습니다. 나를 위해 그것이 응용 프로그램의 LocationClients에서 가장 먼저 사용 된 간격과 같습니다. 내 경우에는 60 초 간격으로 – Biggie
문서에 LocationClient를 앱당 하나의 인스턴스로 제한하는 것은 없습니다. 그러나 업데이트가 앱 전반에 걸쳐 있다는 점은 탐구 할만한 가치가 있습니다. 이것이 Google Play 서비스의 요점입니다. 전화 당 인스턴스/버전은 하나뿐입니다. 플레이 서비스에서 LocationClient를 통해 업데이트를 요청해야한다면, 마지막 요청이 뒤 따르게 될 것이라고 생각합니다. 값을 전환하고 반대 결과를 얻는 지 확인해야합니다. – Rarw