我怎样才能发现wifi状态变化的事件

时间:2014-02-20 12:49:46

标签: android android-wifi

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

例如,如果我在主屏幕上同时拥有我的小部件和Android默认的Power Control小部件,并且我使用我的小部件禁用了Wifi,那么Android默认的Power Control小部件的Wifi按钮也会被禁用,但是如果我使用库存电源控制小部件禁用wifi,我的wifi按钮的src没有改变,仍然表明wifi已启用。

任何想法都值得赞赏,因为我无法找到解决方案。

修改 这是我的BroadcastReceiver:

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>

2 个答案:

答案 0 :(得分:1)

通过在清单中注册ACCESS_NETWORK_STATE来收听ACCESS_WIFI_STATEBroadcastReceiver等系统广播。

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

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

答案 1 :(得分:0)

public boolean checkOnlineState() {
        ConnectivityManager CManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo NInfo = CManager.getActiveNetworkInfo();
        if (NInfo != null && NInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }