Android 如何捕获wifi状态更改事件

Android 如何捕获wifi状态更改事件,android,android-wifi,Android,Android Wifi,我正在开发一个电源控制小部件,其中我有一个ImageButton,当按下它时可以切换Wifi,还可以更改按钮的src以进行视觉确认。问题是,我不知道如何从其他来源(如设置或其他电源控制小部件)检测Wifi何时被禁用或启用,并相应地更改按钮的src 例如,如果我的小部件和Android默认电源控制小部件都在主屏幕上,并且我使用我的小部件禁用Wifi,那么Android默认电源控制小部件的Wifi按钮也会被禁用,但是如果我使用stock Power Control小部件禁用Wifi,我的wifi按钮

我正在开发一个电源控制小部件,其中我有一个ImageButton,当按下它时可以切换Wifi,还可以更改按钮的src以进行视觉确认。问题是,我不知道如何从其他来源(如设置或其他电源控制小部件)检测Wifi何时被禁用或启用,并相应地更改按钮的src

例如,如果我的小部件和Android默认电源控制小部件都在主屏幕上,并且我使用我的小部件禁用Wifi,那么Android默认电源控制小部件的Wifi按钮也会被禁用,但是如果我使用stock Power Control小部件禁用Wifi,我的wifi按钮的src没有改变,仍然指示wifi已启用

任何想法都很感激,因为我找不到解决办法

编辑: 这是我的收音机:

public void onReceive(Context context, Intent intent) {

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    int state = wifi.getWifiState();
    switch(state) {
        case WifiManager.WIFI_STATE_DISABLED:
            remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_off);
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_on);
            break;
        case WifiManager.WIFI_STATE_DISABLING:
            remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_off);
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_on);
            break;
    }           


}
还有AndroidManifest.xml:

<receiver
android:name="WidgetIntentReceiver"
    android:label="widgetBroadcastReceiver" >
    <intent-filter>             
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        <action android:name="android.net.wifi.STATE_CHANGE" />             
</intent-filter>

以及权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>   
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>

通过在清单中注册
广播接收器来收听系统广播,如
访问网络状态
访问WIFI状态

要收听这些系统广播,您需要在清单中声明权限。有关广播操作和所需的相应权限,请参阅文档


我希望你知道如何实现广播接收机

如果有帮助的话,好吧,既然这是一个小部件,我应该在哪里调用这个方法呢?此外,这不是在检查设备是否正在连接/已连接到网络吗?我对此不感兴趣。我只是想知道它什么时候从我的小部件以外的其他来源被启用/禁用。我已经有了一个广播接收器。我已经编辑了我的问题以包含onCreate方法。这不管用吗?据我所知,当wifi状态发生变化时,我的intent filter
android.net.wifi.wifi\u STATE\u CHANGED
应该会触发广播接收器的onCreate方法。它应该可以工作,我没有理由不工作。您是否添加了break point或log命令来检查是否实际调用了
onreceive
。我已经让它工作了。调用了onReceive的
onReceive
方法,但问题是在切换案例中更改图像后,我没有在AppWidgetProvider类中推送小部件更新。谢谢你给我指明了正确的方向。
public boolean checkOnlineState() {
        ConnectivityManager CManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo NInfo = CManager.getActiveNetworkInfo();
        if (NInfo != null && NInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }