我正在开发一个Power Control小部件,其中我有一个ImageButton,当按下切换Wifi并且还更改按钮的src以进行视觉确认。问题是我不知道如何检测何时从其他来源禁用或启用Wifi,例如从设置或其他电源控制小部件启用,并相应地更改按钮的src。
例如,如果我在主屏幕上同时拥有我的小部件和Android默认的Power Control小部件,并且我使用我的小部件禁用了Wifi,那么Android默认的Power Control小部件的Wifi按钮也会被禁用,但是如果我使用库存电源控制小部件禁用wifi,我的wifi按钮的src没有改变,仍然表明wifi已启用。
任何想法都值得赞赏,因为我无法找到解决方案。
修改 这是我的BroadcastReceiver:
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>
答案 0 :(得分:1)
通过在清单中注册ACCESS_NETWORK_STATE
来收听ACCESS_WIFI_STATE
或BroadcastReceiver
等系统广播。
要收听这些系统广播,您需要在清单中声明的权限。有关广播操作和所需的相应权限,请参阅this文档。
我希望你知道如何实现广播接收器。
答案 1 :(得分:0)
public boolean checkOnlineState() {
ConnectivityManager CManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo NInfo = CManager.getActiveNetworkInfo();
if (NInfo != null && NInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}