2011-01-11 5 views
0

몇 초 전에 위젯을 디버깅 중이었고 내 위젯이 홈 화면에 없더라도 onReceive 메서드가 호출되었음을 알았습니다 (WIFI_STATE_CHANGED_ACTION 수신 대기). 내 위젯의 프로세스가 실행 중이 지 않더라도 시작되고 메소드가 호출됩니다.onReceive가 호출되어서는 안되는 경우

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> 

    <receiver android:name="WiFiWidget"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     </intent-filter> 

     <meta-data android:name="android.appwidget.provider" 
        android:resource="@xml/widget_info" /> 
    </receiver> 

</application> 

방법 onReceive은 단순히 다른 방법 toggleState를 (와이파이 상태를 변경하는)를 호출 한 후 오프에서 이미지 또는 (위젯 이미지를 업데이트 : 매니페스트 코드는 다음과 같다 viceversa). 분명히

두 가지 방법 toggleState 및 updateWidget (그래서 전체 onReceive) 위젯이 홈 화면에 실제로 활성화되어 있지 않으면 쓸모가의 호출 .. 그래서

, 내 onReceive는 경우에만 호출합니다 내 위젯은 효과적으로 홈 화면에 배치됩니다.이 일을 할 수있는 방법이 있습니까? :) 답변

+0

이 'BroadcastReceiver'설정 방법에 대해 좀 더 구체적으로 질문을 편집 할 수 있습니까? – CommonsWare

+0

당신이 옳습니다, 죄송합니다 :) .. 코드가 추가되었습니다. – Salv0

답변

2

에 미리

감사는 왜 방송 수신기가 호출되지 않을 것이다? 프로세스/활동이 실행되고 있지 않을 때 브로드 캐스트 리시버가 호출되는 지점입니다.

특정 시간에만 호출되도록하려면 위젯의 코드에 등록하고 브로드 캐스트 수신을 원하지 않을 때 등록을 취소해야합니다.

+0

요점은, 내 위젯이 홈 화면에 배치되지 않은 경우 시스템에서 onReceive를 호출해야하는 이유는 무엇입니까? :) 그것은 쓸모가 없다. – Salv0

+0

시스템은 그것을 어떻게 알아 내야 하나? 아시다시피 WIFI_STATE_CHANGED에서 브로드 캐스트를 수신하도록 등록 된 브로드 캐스트 리시버가 있습니다. 그래서 그것을 전달합니다. – Falmarri

+0

그렇기 때문에 위젯이 홈 화면에없고 onReceive에 대한 호출이 쓸모 없다는 것을 시스템에 알리는 방법 (존재하는 경우)을 요청하는 이유입니다. P – Salv0

관련 문제