2016-06-07 2 views
0

지오 펜스 모니터링을 사용하는 앱을 만들고 있는데,이 기능을 성공적으로 구현했지만 자체적으로 GPS를 사용하는 "기기 전용"위치 설정으로 테스트하는 동안 문제가 발생했습니다.GPS 전용 위치 모드로 안드로이드 지오 펜스 모니터링

디바이스에서만 위치 데이터를 얻을 수 있지만 모니터 할 지오 펜스를 추가하려고하면 항상 GEOFENCE_NOT_AVAILABLE 인 상태 코드 1000이 반환됩니다. 내가 뭔가 잘못하고 있습니까 위치 권한

LocationServices.GeofencingApi.addGeofences(mApiClient, getGeofencingRequest(), 
        mGeofenceRequestIntent).setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(@NonNull Status status) { 
        if(!status.isSuccess()) { 
         Toast.makeText(mContext, String.format("Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show(); 
        } 
        else{ 
         Toast.makeText(mContext, String.format("Successfully Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show(); 
        } 
       } 
      }); 

을 확인했다 또는 고정밀 위치 모드의 배터리 절약을 사용하는 사용자를 강제로 내 유일한 옵션은 후 addGeofences 아래

이 코드가 호출됩니다?

답변

0

Google 서비스에 기반한 지오 펜싱은 기본적으로 GPS 업데이트를 요청하지 않습니다. 그렇게해야만 '강제'해야합니다. 그 후에 앱이 예상대로 다시 작동해야합니다.

그것은 나를 당신의 GoogleAPIClient 초기화, GeofencingRequest을 보유하고있는 활동 파일의 공용 클래스에 LocationListener를 구현 한 근무했다 방법 등

그런 다음 같은 공용 클래스에서 마지막

private LocationManager locationManager; 
에 추가 당신의 방법에서 onCreate

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

을 종료뿐만 onResume이 아니라 ('1000'과 '5'인 제에서 본 얹는

전자 업데이트 (밀리 초) 속도와 각각 갱신 당 샘플 수)

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, this); 

그리고 마지막으로 앱이 포 그라운드에 있지 않을 때 배터리를 절약하려는 경우 onPause이 추가되지만 중에 발생하는 모든 알림을 그리워합니다 내 경험에 의한이 가동 중지 시간

locationManager.removeUpdates(this); 

또한 모든 새 패키지를 가져와야합니다.

시스템 설정을 변경하기 전에 정확도에 관계없이 알림을받을 수 있었지만 다른 내용을 변경하지 않았다면 문제가 해결 될 수 있습니다.

기기 전용 설정을 사용하도록 설정되었지만 Maps와 같은 애플리케이션을 통해서만 위치 데이터를 가져 오는 중입니다. Wi-FI, CELLULAR 데이터가 있어도 해당 제공 업체의 GPS 데이터를 요청할 수 있습니다. 또는 둘 다 사용할 수 없습니다. 문제를 지적하기 위해 더 많은 코드를 게시 할 수도 있습니다.

+0

그런데 오른쪽의 링크 중 하나를 읽은 후에도 오류 번호는 설정에서 위치 모드를 변경하는 것과 관련이 있다는 것을 깨달았습니다. 진행중인 모든 지오 펜스가 등록 될 때 등록이 취소되면 순서대로 진행되므로 이 문제를 피하려면 해당 변경 사항을 보완하기 위해 코드에서 특정 논리를 사용해야합니다.이 경우에는 이미 알고있을 수도 있지만, 경우에 따라 다음과 같습니다. http://stackoverflow.com/questions/19082482 / –