2013-03-23 2 views
1

나는 단순히 테스트를 위해 영역을 위해 근접성을 설정하려고합니다. 단지 이것을 내 주요 활동의 onCreate 메소드에 추가했습니다.알림을 등록했는데 왜 근접도가 변경되지 않습니까?

public void onCreate(Bundle bndBundle) { 

    IntentFilter filter = new IntentFilter(WidgetService.ACTION_STOP_PROXIMITY); 
    registerReceiver(new ProximityIntentReceiver(), filter); 

    LocationManager locManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); 
    Intent ittIntent = new Intent(this, ProximityIntentReceiver.class); 
    ittIntent.putExtra(WidgetService.KEY_STOP_IDENTIFIER, 1000); 
    PendingIntent pitIntent = PendingIntent.getBroadcast(this, 0, ittIntent, 0); 
    locManager.addProximityAlert(60.15769, 24.94150, 150, -1, pitIntent); 

    super.onCreate(bndBundle); 
    getActionBar().setDisplayHomeAsUpEnabled(false); 

} 

여기에 .. 그리고 내 에뮬레이터에서이 테스트를하고있어 내가

public class ProximityIntentReceiver extends BroadcastReceiver { 

    private static final int NOTIFICATION_ID = 1000; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     Boolean entering = intent.getBooleanExtra(key, false); 

     if (entering) { 
      Log.d(getClass().getSimpleName(), "entering"); 
     } 
     else { 
      Log.d(getClass().getSimpleName(), "exiting"); 
     } 

    } 

} 

를 사용하고 간단한 수신기 클래스이고 나는의 좌표를 설정 DDMS 콘솔을 사용할 때 수동으로 전화를 걸면 로그 메시지가 표시되지 않습니다.

내 매니페스트 파일에 특별한 코드가 없습니다. 올바른 사용 권한을 추가하고 간단한 활동을위한 코드가 있습니다. 서비스 나 기타는 없습니다.

StacKOverflow에서 전체 게시물을 읽었지만 문제를 해결할 수 없었습니다. 제 발췌 문장에 뭔가 빠졌습니까?

답변

1

이 수신자를 동적으로 registerReceiver()에 등록하면 동작 문자열이 WidgetService.ACTION_STOP_PROXIMITY 인 브로드 캐스트에 응답하게됩니다.

그러나 실제로 보내는 브로드 캐스트는 수신기 클래스를 식별하는 명시적인 Intent을 사용하려고합니다. 이 번호는 registerReceiver()과 함께 사용중인 IntentFilter과 일치하지 않습니다.

다음 중 하나를

  • 이 사용 new Intent(WidgetService.ACTION_STOP_PROXIMITY) 대신 new Intent(this, ProximityIntentReceiver.class)을 매니페스트에 리시버를 등록하고이 경우 사용자의 명시 적 Intent이 작동, registerReceiver() 제거, 또는

  • 그래서 당신의 Intent 라인 귀하의 IntentFilter

명시적인 Intent 객체를 사용하여 registerReceiver()을 통해 등록 된 수신자에게 브로드 캐스트를 보낼 수 없습니다. 명시적인 Intent은 매니페스트 등록 수신기에서만 작동합니다.

+0

정확히 내가 이전에 했었지만 여전히 작동하지 않습니다. 나는'new Intent (WidgetService.ACTION_STOP_PROXIMITY)'를 사용하는 것과 같은 것을 만들지 않는다. 나머지 코드는 동일하지만 로그 메시지는 메소드가 실제로 트리거되지 않은 것처럼 보이지 않습니다. –

+1

@MridangAgarwalla :'addProximityAlert()'와 함께 사용하는 것 외에도'PendingIntent'에서'send()'를 한 번 호출 해보십시오. 여전히 로그 메시지를받지 못한다면 문제는 여전히'BroadcastReceiver'와'PendingIntent'에 있습니다. 아니면 근접 알람 설정 코드가 모두 호출되지 않았을 수도 있습니다. 만약 당신이 당신의 매뉴얼'send()'로부터 로그 메시지를 얻었지만 근접 경고 메시지가 아니라면, 다른 문제가있다. 근접 경고가 실제로 등록되었는지 확인하려면'adb shell dumpsys location'을 시도하십시오. – CommonsWare

+0

'adb shell dumpsys location'을 실행하면 해당 어플리케이션이 지오 펜스 목록에 있고 좌표가 맞는지 확인할 수 있습니다. 'PendingIntent'를 보냈을 때, 수신기가 잘 작동하여 왜 이제는 의도적으로 트리거하지 않는지 궁금해졌습니다. 나는 에뮬레이터를 깨끗이 지워 버렸고 그것도 도움이되지 못했습니다. –

0

올바른 좌표를 입력했는지 확인하십시오. DDMS에서 그들은 경도 우선, 경도가 뒤입니다.

관련 문제