android - Wifi 启用广播迟到

标签 android android-intent widget wifimanager

我有一个小部件,我正在尝试使用它来启用/禁用 wifi,以及显示一些附加信息。我想在 Wifi 启用/禁用时显示一个过渡沙漏图标,所以我正在监听 android.net.wifi.WIFI_STATE_CHANGED Intent 。

当捕获到该 Intent 时,我将调用小部件的 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));
}

这在较小的小部件上运行良好,它只是一个切换开关,但在较大的小部件上,完全相同的代码不会产生正确的结果。它在禁用时显示沙漏,但在启用时不显示。似乎接收 Intent 的时间太晚,无法显示任何内容,因为调试日志显示它最终被接收了。它只是在状态更改为 WIFI_STATE_ENABLED 之前不会随 WIFI_STATE_ENABLING 一起出现。

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

最佳答案

Gingerbread 版本之后可能会有更多调整。您现在可以做的是检查 android 版本,如果是 GB,则需要进行一些修改。

您可以检查 WIFI_STATE_CHANGED_ACTION 并使用

获取上一个/下一个状态

EXTRA_WIFI_STATE EXTRA_PREVIOUS_WIFI_STATE

关于android - Wifi 启用广播迟到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780511/

相关文章:

widget - Gadget 和 Widget 在技术(功能)上有何不同?

android - AlphaAnimation 对象不会更改动画 View 的 alpha 属性,为什么?

Android将我自制的CA证书识别为用户证书,并且无法正确安装

android - 添加 ADB 命令以构建序列 (Android Studio)

android - 这段代码有什么问题(使用 Intent )?

android - 如何判断哪个Activity启动了某个服务?

android - 我想在我的警报对话框中显示确定和取消按钮吗?

android - PendingIntent 如何触发 Intent ?

flutter - 我的行让一切都消失了 Flutter

python - 如何通过.py文件上的id修改kivy小部件属性