2012-08-22 2 views
3

위치 인식 알림을위한 최고의 기술을 찾고 있습니다.Android 위치 인식 알림

첫 번째 시도는 LocationManager의 addProximityAlert를 사용했지만 ACCESS_FINE_LOCATION이 필요합니다 (COARSE_LOCATION이 (가) SecurityException을 제공함) GPS를 항상 켜고 활성 상태로 유지합니다 (적어도 젤리에서). 그러면 배터리가 매우 빨리 소모됩니다. 또한 화면이 잠 들어있을 때마다 (4 분에 한 번만) 수표를받는 것처럼 보이지 않습니다 (addProximityAlert).

다른 응용 프로그램 위치 정보를 수집하기 위해 PASSIVE_PROVIDER와 (과) 협력하고 화면이 꺼져있을 때마다 매 4 분마다 COARSE_LOCATION을 요청하는 서비스를 사용할 수 있습니다. 화면이 켜져 있고 장치가 연결되어 있음).

사용자가 일부 위치 주변으로 이동할 때 앱에서 알림을 발생합니다.

효과적이고 배터리 효율적으로 구현하려면 누구나 구현했거나 제안 사항이 있습니까?

답변

4

나는 그런 응용 프로그램을 만들었습니다. (따라서 Office Hours Q &에있는 내 질문에 대해 LocationManager의 전원 측정 방법에 대해 알고 싶습니다.) 그리고 그 동안은 정말 잘 작동하고 있습니다. 처음에는 내장 된 근접 경고를 사용하려고했지만, 당신과 같은 문제에 어려움을 겪었으며 충분히 유연하지 않다고 생각했습니다.

대신에 LocationProvider를 사용하여 5 분마다 NETWORK_PROVIDER를 사용하여 위치를 폴링하고 원하는 위치까지의 거리를 계산하며 근접 거리 내에있는 경우 알림을 발생시키는 서비스를 구축했습니다. Wi-Fi 네트워크가 많은 도시에서는 50m의 정확도를 제공합니다.

다른 앱의 위치 요청을 활용하려면 PASSIVE_PROVIDER도 사용합니다.

내가 원하는 위치 근처에 있고 신고 된 정확도가 너무 가깝기 때문에 지정된 근접 거리 내에 있는지 여부를 결정할 수 없으면 백업으로 단일 GPS 위치 요청을 사용하고 있습니다. 또한 NETWORK_PROVIDER 시간이 초과되면 단일 GPS 위치 요청을 사용합니다. 지하철을 사용하는 동안 GPS 공급자가 배터리를 소모하지 않도록하려면 지수 대기 백 오프 시간 제한이 있습니다.

저는 Wi-Fi 네트워크에 연결되어 있지만 이동하지 않는다고 가정하고 그 시간 동안 위치 제공기를 비활성화합니다.

내가 마지막으로 변경 한 사항은 NETWORK_PROVIDER에 대해 15 분 ("부정확 반복") 타이머를 사용하여 15 분 내에 저장된 위치 중 하나에 연결할 수 없다는 것을 결정할 수있었습니다 (폴링과 함께). 5 분짜리 인터벌은 의미가 없습니다.) 이렇게하면 전력을 절약하는 데 도움이됩니다.

더 많은 전력을 절약하기 위해 더 긴 간격을 사용하는 것에 대해 생각하고 있었지만, 그 시간 내에 내 저장된 위치 중 하나에 도달 할 수 있는지 여부를 결정하는 휴리스틱을 여기에서 발견하는 것은 쉽지 않습니다. 항상 동일한 이동 속도 (도보, 기차 또는 자동차로 여행)를 취하는 것은 아닙니다. 그러나 내 응용 프로그램으로 인한 LocationManager의 전력 소모를 측정 할 수 없기 때문에 매일의 시나리오에서 전력 소모를 평가하는 방법을 알지 못합니다.

기본 제공 API가 모든 로직을 제공하더라도 상관 없지만 실제로는 그렇지 않다고 결론을 내 렸습니다. 그래서 직접 작성했습니다.

희망이 도움이됩니다.

+0

많은 코드를 작성해야합니다. addProximityAlert를 사용하여 호핑을했습니다 :) 모든 정보를 주셔서 감사 드리며 앱의 동작 중 일부를 모방하려고 시도합니다 ... – luciofm

+0

@machtnix는 목표를 달성하기 위해 몇 가지 샘플 코드를 제공 할 수 있습니까? –

+0

@droidhot 이 기사에서 http://android-developers.blogspot.de/2011/06/deep-dive-into-location.html에 일부 코드 스 니펫의 소개로 제공됩니다. – machtnix

0

다음 라이브러리를 사용하고 있습니다. https://code.google.com/p/little-fluffy-location-library/

사용하기 쉽지만 유연성이 많지 않습니다. 예를 들어 업데이트 빈도를 즉석에서 변경할 수 없습니다. 그러나 소스를 사용할 수 있으며 변환 할 수 있습니다.

+0

그것은 좋은 출발점이다. 나는 실제로 내 자신의 lib를하고 있는데, 나는 그것을 사용하고있다. 참고로 ... – luciofm

+0

고맙습니다. 나는 도서관이 거의 ​​준비가되었다고 생각한다. 그리고 그것은 오픈 소스입니다. 뭔가를 좋아하지 않으면 바꿀 수 있습니다. 다른 답변이 불필요하다고 말하면서 많은 코드가 망가졌습니다. – tasomaniac