我有一个小部件,我正在尝试使用它来启用/禁用 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 一起出现。
最令人费解的是,这个小部件在我的平板电脑和我室友的手机上都能正常工作,只是在我的手机上不行。但是,在我能更确定它的性能之前,我不想发布它。有任何想法吗?