마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

근접경보 알림 등록과 해제에 대해서..

0 추천

특정 지점을 등록하는 경우 addProximityAlert함수를...

해제할려면 removeProximityAlert함수를 쓰는 걸로 알고 있습니다.

만약에 지점 여러개를 등록을 하고 기존에 등록된 모든 지점들을 해제하고 싶으면 어떻게 해야할까요?

public void ProximityAlertUpdate(String locality){
 
            if(proximityIntent!=null){
                locationManager.removeProximityAlert(proximityIntent);
            }
 
            receiver=new ProximityAlertBroadcastReceiver();
            IntentFilter filter=new IntentFilter("com.example.ab.location7");
            registerReceiver(receiver,filter);
            Intent intent=new Intent("com.example.ab.location7");
            proximityIntent= PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
 
            for(int i=0; i<BranchGPSManger.getBranchGPSDataArrayList().size();i++){
                if(locality.equals(BranchGPSManger.getBranchGPSDataArrayList().get(i).getLocality())){                    
                    locationManager.addProximityAlert(BranchGPSManger.getBranchGPSDataArrayList().get(i).getLatitude(),BranchGPSManger.getBranchGPSDataArrayList().get(i).getLongitude(),5000,-1,proximityIntent);
                }
            }
        }
 
제가 짠 함수인데요...사용자의 위치가 성북구이면 지점 데이터들 중에 성북구인 지점만 골라서 반복문으로 다 등록을 해줍니다..이렇게 여러번 등록을 했는데.. 코드 처음에보면 해제는 한번만 해주고 있거든요..지금 서버쪽이 이상해서 테스트를 할수 없네요 ㅠ 이렇게 해제를 한번만 해줘도 되는걸까요? 
빙구짱 (1,720 포인트) 님이 2015년 4월 22일 질문

1개의 답변

+1 추천
 
채택된 답변
PendingIntent가 전부 같은 requestCode (위 코드 상으로는 0이네여) 를 가지고 있으므로

한번만 해제해주어도 상관없습니다.

만약 requestCode를 다르게 준 경우라면 모든 add할 때 넣었던 모든 PendingIntent를 해제해주어야 합니다.

다만 위 코드 상에서 addProxymityAlert 했을 때 모든 위치(등록한 위도, 경도)가 다 등록이 되서  제대로 동작 하는지 아니면 마지막에 add 된것만 동작 하는지는 검토가 필요합니다.
Gradler (109,780 포인트) 님이 2015년 4월 22일 답변
빙구짱님이 2015년 4월 22일 채택됨
감사합니다!!많은 도움 됐습니다!!
마지막에 add 된것만 동작할것같아 코드를 수정했습니다 펜딩인텐트를 어레이리스트로 이렇게 관리 해주면 되겠죠? 어떨것 같은지 의견을 좀 물어도 될까요?

public void ProximityAlertUpdate(String locality){
            if(proximityIntent!=null){
                for(int i=0; i<pendingIntentArrayList.size();i++){
                    locationManager.removeProximityAlert(pendingIntentArrayList.get(i));
                }
                pendingIntentArrayList.clear();
            }
            receiver=new BroadcastReceiverProximityAlert();
            IntentFilter filter=new IntentFilter("com.example.ab.location7");
            registerReceiver(receiver,filter);
            Intent intent=new Intent("com.example.ab.location7");

            for(int i=0; i<BranchGPSManger.getBranchGPSDataArrayList().size();i++){
                if(locality.equals(BranchGPSManger.getBranchGPSDataArrayList().get(i).getLocality())){
                    PendingIntent proximityIntent= PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
                    pendingIntentArrayList.add(proximityIntent);
                    locationManager.addProximityAlert(BranchGPSManger.getBranchGPSDataArrayList().get(i).getLatitude(),BranchGPSManger.getBranchGPSDataArrayList().get(i).getLongitude(),5000,-1,proximityIntent);
                }
            }
        }
...