3

我有一个小部件,我正在尝试使用它来启用/禁用 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 一起出现。

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

4

1 回答 1

-1

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

您可以检查 WIFI_STATE_CHANGED_ACTION 并使用获取上一个/下一个状态

EXTRA_WIFI_STATE EXTRA_PREVIOUS_WIFI_STATE

于 2012-03-27T09:05:46.370 回答