作为对sabsab的回应。为了连接到Connectivity Change广播接收器,我使用了warbi的答案并添加了一个静态方法的类。
public class WifiHelper
{
private static boolean isConnectedToWifi;
private static WifiConnectionChange sListener;
public interface WifiConnectionChange {
void wifiConnected(boolean connected);
}
/**
* Only used by Connectivity_Change broadcast receiver
* @param connected
*/
public static void setWifiConnected(boolean connected) {
isConnectedToWifi = connected;
if (sListener!=null)
{
sListener.wifiConnected(connected);
sListener = null;
}
}
public static void setWifiListener(WifiConnectionChange listener) {
sListener = listener;
}
}
然后,我对上面显示的第一个答案的接收器类进行了更改。
public class ConnectivityReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI)
{
Log.d("WifiReceiver", "Have Wifi Connection");
WifiHelper.setWifiConnected(true);
} else
{
Log.d("WifiReceiver", "Don't have Wifi Connection");
WifiHelper.setWifiConnected(false);
}
}
}
最后,在您的活动中,您可以添加一个侦听器来利用此回调。
wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
wasWifiEnabled = (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED || wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING);
WifiHelper.setWifiListener(new WifiHelper.WifiConnectionChange()
{
@Override
public void wifiConnected(boolean connected)
{
//Do logic here
}
});
注意,在回调触发后,侦听器被删除,这是因为它是一个静态侦听器。无论如何,这个实现对我来说是有效的,并且是钩住你的活动的一种方式,或者在任何地方使它成为静态的。
谢谢Tanner!将尝试。 – Neha 2011-06-17 19:22:10
我建议您编辑您的代码并明确参考上下文:“WifiManager wifi =(WifiManager)context.getSystemService(Context.WIFI_SERVICE);”否则,如果在单独的类中使用,则可能会出现“getSystemService()”错误。 – 2012-07-20 14:54:48