Wifi启用广播迟到

时间:2012-03-20 02:09:05

标签: android android-intent widget wifimanager

我有一个小工具,我正在尝试使用它来启用/禁用wifi,以及显示一些额外的信息。我想在Wifi启用/禁用时显示过渡沙漏图标,所以我正在收听android.net.wifi.WIFI_STATE_CHANGED意图。

当抓住那个意图时,我正在调用小部件的onUpdate函数,并且我有这个代码块来更改显示的图像:

WifiManager wifiMan = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMan.getConnectionInfo();

RemoteViews views = new RemoteViews("com.nickavv.cleanwidgets", R.layout.wifi_toggle_layout_large);

supState = wifiInfo.getSupplicantState();
wifiState = wifiMan.getWifiState();

if(wifiState == WifiManager.WIFI_STATE_ENABLED) {
    //Show enabled image
} else if(wifiState == WifiManager.WIFI_STATE_DISABLED){
    //Show disabled image
} else {
    //Show hourglass
}

这是我的拦截点击和wifi状态更改的代码:

@Override  
public void onReceive(Context context, Intent intent) {  
    super.onReceive(context, intent);
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) { 
        if(wifiState != WifiManager.WIFI_STATE_ENABLING || wifiState != WifiManager.WIFI_STATE_DISABLING) {
            switchToggle(context);
        }
    }
    AppWidgetManager myAWM = AppWidgetManager.getInstance(context);
    ComponentName cn = new ComponentName(context, WifiWidgetLarge.class);
    onUpdate(context, myAWM, myAWM.getAppWidgetIds(cn));
}

这在较小的小部件上工作正常,这只是一个切换开关,但在较大的小部件上,完全相同的代码不会产生正确的结果。它在禁用时显示沙漏,但在启用时不显示。似乎收到的意图太迟而无法显示任何内容,因为调试日志显示它最终被收到。直到状态更改为WIFI_STATE_ENABLED之前,才会使用WIFI_STATE_ENABLING。

最令人费解的是,这个小部件在我的平板电脑和我室友的电话上工作正常,而不是在我的手机上。但是,在我更加确定其性能之前,我不想发布它。有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

姜饼版可能会有更多的调整。你现在可以做的是检查android版本,如果它是GB,你需要做一些黑客攻击。

你可以检查WIFI_STATE_CHANGED_ACTION并使用

获取上一个/下一个状态

EXTRA_WIFI_STATE EXTRA_PREVIOUS_WIFI_STATE