onReceive在不应该的时候调用

时间:2011-01-11 20:58:03

标签: android android-widget android-wifi

几秒钟之前,我正在调试我的小部件,我发现即使我的小部件不在主屏幕上,它也会调用onReceive方法(它会监听WIFI_STATE_CHANGED_ACTION)。即使我的窗口小部件的进程没有运行,它也会被启动并调用该方法。 清单中的代码如下:

    

<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(更改wifi状态),然后更新小部件图像(从关闭到打开图像或反之亦然)。

显然,如果小部件在主屏幕上实际上没有活动状态,则调用两个方法toggleState和updateWidget(以及完整的onReceive)是没用的。

所以,我希望我的onReceive只有在我的小部件被有效放置在主屏幕上时才会被调用..这是一种方法吗? :)

提前感谢答案

1 个答案:

答案 0 :(得分:2)

为什么你的广播接收器不会被呼叫?当您的流程/活动未运行时,就会调用广播接收器。

如果您只想在特定时间调用它,则必须在窗口小部件的代码中注册它,并在您不想接收广播时取消注册。