作爲對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