Android 如何捕获wifi状态更改事件
我正在开发一个电源控制小部件,其中我有一个ImageButton,当按下它时可以切换Wifi,还可以更改按钮的src以进行视觉确认。问题是,我不知道如何从其他来源(如设置或其他电源控制小部件)检测Wifi何时被禁用或启用,并相应地更改按钮的src 例如,如果我的小部件和Android默认电源控制小部件都在主屏幕上,并且我使用我的小部件禁用Wifi,那么Android默认电源控制小部件的Wifi按钮也会被禁用,但是如果我使用stock Power Control小部件禁用Wifi,我的wifi按钮的src没有改变,仍然指示wifi已启用 任何想法都很感激,因为我找不到解决办法 编辑: 这是我的收音机:Android 如何捕获wifi状态更改事件,android,android-wifi,Android,Android Wifi,我正在开发一个电源控制小部件,其中我有一个ImageButton,当按下它时可以切换Wifi,还可以更改按钮的src以进行视觉确认。问题是,我不知道如何从其他来源(如设置或其他电源控制小部件)检测Wifi何时被禁用或启用,并相应地更改按钮的src 例如,如果我的小部件和Android默认电源控制小部件都在主屏幕上,并且我使用我的小部件禁用Wifi,那么Android默认电源控制小部件的Wifi按钮也会被禁用,但是如果我使用stock Power Control小部件禁用Wifi,我的wifi按钮
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>
通过在清单中注册
广播接收器来收听系统广播,如访问网络状态
或访问WIFI状态
要收听这些系统广播,您需要在清单中声明权限。有关广播操作和所需的相应权限,请参阅文档
我希望你知道如何实现广播接收机 如果有帮助的话,好吧,既然这是一个小部件,我应该在哪里调用这个方法呢?此外,这不是在检查设备是否正在连接/已连接到网络吗?我对此不感兴趣。我只是想知道它什么时候从我的小部件以外的其他来源被启用/禁用。我已经有了一个广播接收器。我已经编辑了我的问题以包含onCreate方法。这不管用吗?据我所知,当wifi状态发生变化时,我的intent filterandroid.net.wifi.wifi\u STATE\u CHANGED
应该会触发广播接收器的onCreate方法。它应该可以工作,我没有理由不工作。您是否添加了break point或log命令来检查是否实际调用了onreceive
。我已经让它工作了。调用了onReceive的onReceive
方法,但问题是在切换案例中更改图像后,我没有在AppWidgetProvider类中推送小部件更新。谢谢你给我指明了正确的方向。
public boolean checkOnlineState() {
ConnectivityManager CManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo NInfo = CManager.getActiveNetworkInfo();
if (NInfo != null && NInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}