2012-12-17 2 views
4

WI-FI 공급자가 변경된 위치의 이벤트 리스너에 어떤 일이 발생했는지 아는 사람이 있습니까? 나는 이것에 대해 많은 질문을 보았지만 적절한 답은 없었다.LocationManager.NETWORK_PROVIDER이 ICS에서 onLocationChanged를 트리거하지 않습니다.

나는 모든 것을 잘하고 있으며, 안드로이드의 이전 버전에서 작동하고 있지만, 이제는 SAMSUNG GALAXY TAB 10.1을 ICS로 업데이트했으며 더 이상 작동하지 않습니다. 아마 이것은 ICS에 자신의 UI를 구현했을 때 SAMSUNG (또는 내 모바일 공급자) 버그입니다 ...

나는 이와 같은 eventlistener를 등록 할 예정입니다. 이전 버전의 Android에서 잘 작동하고 있습니다. 설정에서 모든 위치 서비스) : 네트워크 공급자가 활성화되고 그것이 것처럼 보인다면 내가 확인

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, loclistener); //refresh time and distance are to 0 so it should trigger location change event

요청 후.

코드 :

if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
    Toast.makeText(this, "NETWORK PROVIDER enabled!", Toast.LENGTH_LONG).show(); 
    } 

누군가가 아이디어를 가지고 있다면 나는 다음에 onLocationChanged() 메소드를 수정,

+0

WiFi가 켜져 있고 네트워크에 연결되어 있습니까? NETWORK_PROVIDER는 Google 서버를 호출하여 현재 위치를 확인하므로 인터넷에 액세스 할 수 있는지 확인해야합니다. –

+0

코스 :). 나는 또한 응용 프로그램이 실행 중일 때 그것을 돌리려고했는데 아무 것도 얻지 못했습니다 .... – toni

+0

장치에서 실행중인 응용 프로그램에서 DDMS 로그 출력을 게시 할 수 있습니까? –

답변

1

네트워크 제공자가 업데이트 빈도를 추적하기 위해 ... 저를 도와주세요 :

public void onLocationChanged(Location location) {  
    dummyText.setText(location.toString() + "\n" + "Elapsed Time (ms): " + (lastTime - location.getTime())); 
    lastTime = location.getTime(); 
} 

그리고 추가 :

long lastTime = 0; 
,

...을 전역 변수로 사용합니다.

업데이트 간격 (밀리 초 단위)이 인쇄됩니다 (첫 번째 수정 - 첫 번째 수정은 첫 번째 위치의 음수 시간 값을 인쇄합니다).

위의 코드를 삼성 Galaxy S3에서 실행했는데 네트워크 제공 업체가 매 20 초마다 업데이트하므로 코드가 정상적으로 보입니다.

나는 또한 삼성 Dart (T-mobile에서 제공되었지만 활성화되지 않음)에서 WiFi로 실행했으며 네트워크 제공 업체는 매 45 초마다 업데이트합니다.

WiFi에서도 Samsung Nexus S 4G (Sprint에서 제공되었지만 정품 인증되지 않음)를 실행했으며 처음에는 네트워크 제공 업체가 전혀 업데이트하지 않았습니다. 장치를 다시 시작하면 문제가 해결 된 것처럼 보였으 나 이제는 약 20 초마다 업데이트됩니다.

귀하의 의견과 경험을 토대로이 문제는 OEM 간 및 동일한 OEM의 장치 모델간에 차이가있는 것으로 보입니다. Android Jelly Bean 4.1 이전의 LocationListener 동작이 엄격하게 적용되지 않았다는 또 다른 단서가 될 수 있습니다.

http://developer.android.com/reference/android/location/LocationManager.html

이전 젤리 빈으로의 minTime 매개 변수가 있었다 : 최근에 처음 requestLocationUpdates 방법 서명 아래에 여기에 안드로이드 개발자 문서에 언급 된 안드로이드 젤리 빈 4.1에서 시작 LocationListener 행동의 엄격한 시행 단지 힌트 일 뿐이며 일부 위치 제공자 구현은이를 무시합니다. Jellybean부터 안드로이드 호환 장치가 minTime 및 minDistance 매개 변수를 모두 준수해야합니다.

또한 내 경험에 비추어 볼 때 업데이트하는 장치에서 NETWORK_PROVIDER 위치 업데이트의 새로 고침 간격은 여러 장치에서 약 20-30 초 정도로 고정되어 있습니다. 따라서 locationManager.requestLocationUpdates() 메소드에 전달하는 minTime 매개 변수는 무시됩니다.

네트워크 제공 업체 위치를 얻기 위해 기기를 재부팅해야하는 이유는이 위치 정보를 제공하는 Google 서버에서 응답을받지 못했기 때문일 수 있습니다. 재부팅으로 인해 문제가 해결되는 이유를 모르겠습니다.

+0

흠 ... 좋아. 이제 HTC Incredible S (4.0.4 - 원래 htc ota 업데이트), HTC Desire Z (4.0.4 Andromadus 버전, Mimicry 1.5.0으로 뿌리 박 았음) 및 Samsung Galaxy Tab 10.1 (4.0.4 - 원래 삼성 오타 업데이트). 그리고 아무도 업데이트하지 않습니다. 나는 10 분을 기다렸다. 나 또한 3G를 시도하고 또한 작동하지 않습니다. GPS 제공 업체를 추가하고 외부로 나가면 GPS가 위치 변경을 시작합니다. 이것은 정말로 이상합니다 ... – toni

+0

이상한 - 활성 셀 서비스를 사용하는 이들 모든 GSM 장치가 있습니까? 내 경험의 대부분은 CDMA에 있습니다. 예를 들어, Sprint는 맞춤형 ROM을 사용하여 Google 위치 서비스 (system/apps/googleservicesframework.apk)가 설치되어 있는지 확인해야합니다. 이는 라이센스로 인해 맞춤 ROM이 항상 제공되는 것은 아닙니다. 문제. –

+0

onLocationChanged()가 한 번 또는 0 번 트리거됩니까? 한 번만 트리거하는 경우 특정 장치에 대한 OEM의 구현은 위치가 "변경"되면 업데이트를 제공 할 수 있습니다. 즉, 다른 WiFi 핫스팟으로 이동하여 onLocationChanged()가 트리거되는지 확인해야합니다. Android Jelly Bean 4.1에서만 최근에 시작된 LocationListener 동작의 엄격한 적용 –

0

확인. 이제는 제대로 작동하게되었습니다. 정말 이상합니다. 모든 장치를 다시 시작했는데 이제는 업데이트됩니다. 나는 무슨 일이 있었는지 모르겠다. 나는이 이상한 행동에 대한 이유가 무엇인지 정말로 알고 싶다. 모든 시간과 도움에 감사드립니다.

1

나는 NETWORK_PROVIDER과 동일한 문제가있었습니다. 그 이유는 업데이트 요청시 NETWORK_PROVIDER가 onLocationChanged() 메서드에 대한 콜백을 생성하지 않기 때문입니다. 위치 업데이트를 시작하려면 getLastKnownLocation(NETWORK_PROVIDER)으로 전화해야합니다.

괴괴 망측 한 것은 GPS_PROVIDER를 위해 이것 필요하지 않다이다.

이 정보가 도움이되기를 바랍니다.

관련 문제