所以實際上你有四個狀態爲(+第五,如果互聯網是有或沒有)
當網絡可用時,你必須通過監控WiFi和移動網絡的狀態來檢查互聯網服務提供商,你的四狀態是
無線上網的變化狀態和
1.移動網絡啓用
2.移動網絡被禁用
移動網絡變化狀態和
1.無線上網啓用
2。禁用了WiFi,
首先你必須監控如果互聯網是否可用,在這之後,你必須添加類似的兩個監聽器(廣播recievers)建立WLAN連接狀態變化和移動狀態的變化和檢查所需的狀態下,我已經添加以下狀態檢查方法,
Reciever實施
檢查在接收器中的變化,然後檢查狀態
public class Internet_State extends BroadcastReceiver {
//checked with new state changed when event occurs
public boolean oldInternetState;
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
Bundle b = intent.getExtras();
// if Internet available
boolean isConnected = !b
.getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY);
// ignore if no state change
if (oldInternetState == isConnected)
return;
// set new oldInternetState
oldInternetState = isConnected;
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
//you can save these states to be monitored in wifi and mobile change change listners
//No internet is 0 state
int state = isConnected?1:0;
if(state)
state = checkState(context)
intent.putExtra("state", state);
// and then send this intent to your required method which will
// check the state and perform function
}
@Override
public void initialize(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
//save the current internet state at start of the receiver registration
oldInternetState = false;
if (activeNetwork != null)
oldInternetState = activeNetwork.isConnectedOrConnecting();
}
}
實現兩個,手機和WiFi狀態變化廣播recievers和更好的增加狀態檢查方法,這樣
檢查國家
監控狀態出的四種狀態
public int checkState(Context context){
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
//No internet is 0 state
int state = isConnected?1:0;
if(isWifi && isMobile)
state = 1;
else if(isWifi && !isMobile)
state = 2;
if(isMobile && isWifi)
state = 3;
else if(isMobile && !isWifi)
state = 4;
return state;
}
並從3個Wifi,Internet和Mobile調用此方法數據更改接收者,不要忘記檢查oldState並將其與狀態更改相匹配。建立WLAN連接狀態
移動老態的
NetworkInfo allNetInfo = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
oldDataState = allNetInfo.getState();
int state = intent.getExtras().getInt(WifiManager.EXTRA_WIFI_STATE);
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
if (state == oldWifiState)
return;
oldWifiState = state;
問題,我得到的支持WiFi 2〜3倍
WIFI的一個以上的電話改變發生,因爲Wifi改變狀態,如TurningOn和TurningOf由OS觸發,你必須消除他們,就像我上面不喜歡
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
只有Enabled和Disabled現在被監控。
這就是我的問題。如何用一個觸發器注意到這些變化?此外,該技術同時啓用移動網絡和WiFi,當我們啓用它們時。其實,WiFi將會很活躍。當WiFi開啓時,我們將不得不動態地決定移動網絡已關閉。 – madhu