標籤:android blog io os ar 使用 java for sp
廢話不說,直接上代碼
<pre name="code" class="java">
public class NetworkUtil {
/** 網路狀態未初始化。請調用init(Context)方法 */
public static final int NETWORK_UNKNOWN = -1;
/** 網路狀態不可用(wifi和GPRS均未啟動和串連) */
public static final int NETWORK_UNAVAILABLE = 0;
/** wifi已串連 */
public static final int NETWORK_WIFI_CONNECTED = 1;
/** wifi未啟動,GPRS已串連 */
public static final int NETWORK_GPRS_CONNECTED = 2;
/** wifi已啟動,但未串連任意熱點 */
public static final int NETWORK_WIFI_ENABLED = 3;
/** 切換了wifi存取點 */
public static final int NETWORK_ACTION_WIFI_POINT_CHANGED = 4;
/** 啟動了WiFi的情況下,轉換到已串連WiFi的狀態 */
public static final int NETWORK_ACTION_WIFI_ENABLED_TO_CONNECTED = 5;
/** WiFi失去了串連,但仍處於啟動狀態 */
public static final int NETWORK_ACTION_WIFI_CONNECTED_TO_ENABLED = 6;
public static final int NETWORK_ACTION_UNKNOWN = -1;
public static final int NETWORK_ACTION_TURN_TO_AVAILABLE = 0;
public static final int NETWORK_ACTION_TURN_TO_UNAVAILABLE = 1;
public static final int NETWORK_ACTION_GPRS_TO_WIFI = 2;
public static final int NETWORK_ACTION_WIFI_TO_GPRS = 3;
private static int networkState = NETWORK_UNKNOWN;
// 在notifyNetworkStateChanged方法中使用。儲存當前WiFi串連的名稱,以便檢查是否已切換了WiFi存取點
private static String currentSSID = null;
/**
* 擷取當前的網路連接狀態。
*
* @return NetworkUtil.NETWORK_UNAVAILABLE,
* NetworkUtil.NETWORK_WIFI_CONNECTED ,
* NetworkUtil.NETWORK_GPRS_CONNECTED, NetworkUtil.
* NETWORK_WIFI_ENABLED
*/
public static int getNetworkState() {
if (networkState == NETWORK_UNKNOWN) {
init();
}
return networkState;
}
public static void init() {
Context context = MainApplication.getContext();
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
State wifiState = null;
if (connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI) != null) {
wifiState = connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState();
}
State gprsState = null;
if (connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE) != null) {
gprsState = connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState();
}
// if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
// if (wifiState == State.CONNECTED) {
// networkState = NETWORK_WIFI_CONNECTED;
// } else {
// networkState = NETWORK_WIFI_ENABLED;
// }
// } else {
// if (gprsState == State.CONNECTED) {
// networkState = NETWORK_GPRS_CONNECTED;
// } else {
// networkState = NETWORK_UNAVAILABLE;
// }
// }
if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
if (wifiState == State.CONNECTED) {
networkState = NETWORK_WIFI_CONNECTED;
} else {
if (gprsState == State.CONNECTED) {
networkState = NETWORK_GPRS_CONNECTED;
} else {
networkState = NETWORK_WIFI_ENABLED;
}
}
} else {
if (gprsState == State.CONNECTED) {
networkState = NETWORK_GPRS_CONNECTED;
} else {
networkState = NETWORK_UNAVAILABLE;
}
}
}
/** 發送網路狀態發生了改變的廣播。 */
public static void notifyNetworkStateChanged(Context context,
int stateBefore, int stateAfter) {
// Log.e("notifyNetworkStateChanged", "stateBefore = " + stateBefore
// + ", stateAfter = " + stateAfter);
int code = NETWORK_ACTION_UNKNOWN;
if (stateBefore == NETWORK_UNAVAILABLE && stateAfter != NETWORK_UNKNOWN
&& stateAfter != NETWORK_UNAVAILABLE) { // 網路狀態不可用轉化為可用
code = NETWORK_ACTION_TURN_TO_AVAILABLE;
} else if (stateBefore != NETWORK_UNKNOWN
&& stateBefore != NETWORK_UNAVAILABLE
&& stateAfter == NETWORK_UNAVAILABLE) { // 網路狀態可用轉化為不可用
code = NETWORK_ACTION_TURN_TO_UNAVAILABLE;
} else if (stateBefore == NETWORK_GPRS_CONNECTED
&& (stateAfter == NETWORK_WIFI_CONNECTED || stateAfter == NETWORK_WIFI_ENABLED)) { // GPRS轉化為WIFI
code = NETWORK_ACTION_GPRS_TO_WIFI;
} else if ((stateBefore == NETWORK_WIFI_CONNECTED || stateBefore == NETWORK_WIFI_ENABLED)
&& stateAfter == NETWORK_GPRS_CONNECTED) { // WIFI轉化為GPRS
code = NETWORK_ACTION_WIFI_TO_GPRS;
} else if (stateBefore == NETWORK_WIFI_CONNECTED
&& stateAfter == NETWORK_WIFI_CONNECTED) { // 未關閉WiFi,只是切換了WiFi存取點
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 擷取WiFi存取點的名稱
String ssid = wifiManager.getConnectionInfo().getSSID();
if (currentSSID != null && !currentSSID.equals(ssid)) {
code = NETWORK_ACTION_WIFI_POINT_CHANGED;
}
} else if (stateBefore == NETWORK_WIFI_ENABLED
&& stateAfter == NETWORK_WIFI_CONNECTED) { // WiFi串連了WiFi存取點
code = NETWORK_ACTION_WIFI_ENABLED_TO_CONNECTED;
} else if (stateBefore == NETWORK_WIFI_CONNECTED
&& stateAfter == NETWORK_WIFI_ENABLED) { // WiFi與存取點失去了串連
code = NETWORK_ACTION_WIFI_CONNECTED_TO_ENABLED;
}
// 如果是WiFi串連,則儲存當前的ssid,以便檢查WiFi串連是否已更換。
if (stateAfter == NETWORK_WIFI_CONNECTED) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
String ssid = wifiManager.getConnectionInfo().getSSID();
currentSSID = ssid; // 儲存當前的SSID
}
if (code != NETWORK_ACTION_UNKNOWN) {
Intent intent = new Intent();
intent.setAction("com.suntek.mway.mobilepartner.NETWORK_STATE_CHANGED");
intent.putExtra("code", code);
context.sendBroadcast(intent);
}
}
/** 返回當前是否有可用網路 */
public static boolean isNetworkAvailable() {
ConnectivityManager connMgr = (ConnectivityManager) MainApplication.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
/** 返回wifi訊號是否為弱 */
public static boolean isWifiRSSIWeak(Context context) {
int rssi = getWifiRssi(context);
// 0 ~ -50 訊號最強,-50 ~ -70 訊號一般,-70 ~ -100 訊號最差
if (rssi < -70) { // 訊號最差
return true;
} else if (rssi < -60) { // 訊號一般
return false;
} else { // 訊號最強
return false;
}
}
/** 返回wifi訊號是否為弱 */
public static boolean isWifiRSSIWeak(int rssi) {
// 0 ~ -50 訊號最強,-50 ~ -70 訊號一般,-70 ~ -100 訊號最差
if (rssi < -70) { // 訊號最差
return true;
} else if (rssi < -60) { // 訊號一般
return false;
} else { // 訊號最強
return false;
}
}
/** 返回wifi訊號強度等級 0-2 */
public static int getWifiRSSILevel(int rssi) {
// 0 ~ -50 訊號最強,-50 ~ -70 訊號一般,-70 ~ -100 訊號最差
if (rssi < -70) { // 訊號最差
return 0;
} else if (rssi < -50) { // 訊號一般
return 1;
} else { // 訊號最強
return 2;
}
}
/** 擷取Wifi訊號強度 */
public static int getWifiRssi(Context context) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getRssi();
}
/** 判斷當前是否移動網路 */
public static boolean isUseChinaMobile(Context context) {
if (!ServiceManager.isPhoneInService()) {
return false;
}
TelephonyManager telManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String operator = telManager.getSimOperator();
if (operator != null) {
LogHelper.trace("operator=" + operator);
if (operator.equals("46000") || operator.equals("46002")) {
// 中國移動
return true;
} else if (operator.equals("46001")) {
// 中國聯通
return false;
} else if (operator.equals("46003")) {
// 中國電信
return false;
}
}
return false;
}
/** 判斷當前是否wifi網路 */
public static boolean isConnectWifi() {
Context context = MainApplication.getContext();
boolean isWifiConnect = false;
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] networkInfos = cm.getAllNetworkInfo();
for (int i = 0; i < networkInfos.length; i++) {
if (networkInfos[i].getState() == NetworkInfo.State.CONNECTED) {
if (networkInfos[i].getType() == ConnectivityManager.TYPE_MOBILE) {
// isWifiConnect = false;
}
if (networkInfos[i].getType() == ConnectivityManager.TYPE_WIFI) {
isWifiConnect = true;
}
}
}
return isWifiConnect;
}
}
Android 工具 + 生產力網路篇(一)