2012-11-08 1 views
4

근접 경고에 문제가 있습니다. 내 안드로이드 응용 프로그램에서 사용자가 일부 위치의 근접 경고를 사용/사용 중지 할 수있는 설정이 있습니다. 인접 경고를 사용하지 않도록 설정하면 모든 것이 잘 작동하고 알림을받지 못합니다.하지만 사용 중지하고 근접 경고를 다시 사용하면 다시 추가되며 위치에 도달하면 알림이 두 번 표시됩니다. 따라서 기본적으로 다시 활성화 할 때마다 새로운 근접 경고가 생성됩니다. 제거하고 다시 추가 한 후 근접 경고 발포

내가 근접 경고 제거하기 위해 사용하는 코드입니다 :

private void removeProximityAlert(int id) { 
    final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Intent intent = new Intent(PROX_ALERT_INTENT + id); 
    PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    manager.removeProximityAlert(proximityIntent); 
} 

을 그리고 이것은 내가 근접 경고 추가하는 데 사용하는 코드입니다 :

private void addProximityAlert(double latitude, double longitude, int id, int radius, String title) { 
    final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Intent intent = new Intent(PROX_ALERT_INTENT + id); 
    PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    manager.addProximityAlert(
      latitude, 
      longitude, 
      radius, 
      -1, 
      proximityIntent 
    ); 

    IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + id); 
    registerReceiver(new ProximityIntentReceiver(id, title), filter); 
} 
+0

'PendingIntent.getBroadcast (this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT) .cancel();'을 (를) 사용해 보셨나요? 취소를 추가하려면 "현재 활성화 된 PendingIntent를 취소해야합니다. PendingIntent를 소유 한 원래 응용 프로그램 만 취소 할 수 있습니다." – jnthnjns

+0

'FLAG_UPDATE_CURRENT'는 기존의'PendingIntent'를 리턴하고'cancel()'은 이름대로 그것을 할 것입니다. – jnthnjns

답변

1
FLAG_CANCEL_CURRENT의 나의 이해는 점이다

을 보류중인 의도가 더 이상 유효하지 않고 취소해야하며 새로 작성해야합니다. 내가 틀렸다면 나를 바로 잡아라. 이것은 내가 생각하기에, 각 취소 및 생성시 근접 알림을 복제하는 이유입니다.

해상도 : 어떤 경우

PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT).cancel(); 

FLAG_UPDATE_CURRENT이 만든 기존의 것을 반환removeProximityAlert에서

내가 다음 줄

PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

로를 변경합니다. cancel()은 나머지 부분을 처리해야합니다. 내가 별도의 줄에 cancel()을 깰 경우


편집

나는 오류를하지 않습니다. 이것을 시도하십시오 :

PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
proximityIntent.cancel(); 
+0

cancel()을 사용하면 해당 줄에 오류가 발생합니다. "형식이 일치하지 않습니다. void에서 PendingIntent로 변환 할 수 없습니다." – edoniti

+0

@edoniti, 그래도 시도 할 때 동일한 오류가 발생합니다. 위의 편집을 참조하십시오. – jnthnjns

+0

시도했지만 작동하지 않습니다. 내가 근접 촬영 체크 박스를 "끄기"로 설정하면 위치에 도달했을 때이를 알리지 못하도록 잘 작동하지만 다시 활성화하면 2 번 알려줍니다. 앱을 제거한 다음 다시 설치하면 내 앱의 근접 촬영 설정을 변경할 때까지 훌륭하게 작동합니다. 예를 들어 4 번 설정을 사용 또는 사용 중지하면 근접 알림을 5 번 받겠습니다. – edoniti

0

문제는 경보를 추가 할 때마다 수신기를 등록한다는 것입니다. 한 번만 등록해야합니다.