package com.my.device_admin.business;
import java.lang.reflect.Method;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
public class NetworkManager {
private Context context;
private ConnectivityManager connManager;
public NetworkManager(Context context) {
this.context = context;
connManager = (ConnectivityManager) this.context
.getSystemService(Context.CONNECTIVITY_SERVICE);
}
/**
* @return 網絡是否連接可用
*/
public boolean isNetworkConnected() {
NetworkInfo networkinfo = connManager.getActiveNetworkInfo();
if (networkinfo != null) {
return networkinfo.isConnected();
}
return false;
}
/**
* @return wifi是否連接可用
*/
public boolean isWifiConnected() {
NetworkInfo mWifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi != null) {
return mWifi.isConnected();
}
return false;
}
/**
* 當wifi不能訪問網絡時,mobile才會起作用
* @return GPRS是否連接可用
*/
public boolean isMobileConnected() {
NetworkInfo mMobile = connManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobile != null) {
return mMobile.isConnected();
}
return false;
}
/**
* GPRS網絡開關 反射ConnectivityManager中hide的方法setMobileDataEnabled 可以開啟和關閉GPRS網絡
*
* @param isEnable
* @throws Exception
*/
public void toggleGprs(boolean isEnable) throws Exception {
Class<?> cmClass = connManager.getClass();
Class<?>[] argClasses = new Class[1];
argClasses[0] = boolean.class;
// 反射ConnectivityManager中hide的方法setMobileDataEnabled,可以開啟和關閉GPRS網絡
Method method = cmClass.getMethod("setMobileDataEnabled", argClasses);
method.invoke(connManager, isEnable);
}
/**
* WIFI網絡開關
*
* @param enabled
* @return 設置是否success
*/
public boolean toggleWiFi(boolean enabled) {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
return wm.setWifiEnabled(enabled);
}
/**
*
* @return 是否處於飛行模式
*/
public boolean isAirplaneModeOn() {
// 返回值是1時表示處於飛行模式
int modeIdx = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
boolean isEnabled = (modeIdx == 1);
return isEnabled;
}
/**
* 飛行模式開關
* @param setAirPlane
*/
public void toggleAirplaneMode(boolean setAirPlane) {
Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, setAirPlane ? 1 : 0);
// 廣播飛行模式信號的改變,讓相應的程序可以處理。
// 不發送廣播時,在非飛行模式下,Android 2.2.1上測試關閉了Wifi,不關閉正常的通話網絡(如GMS/GPRS等)。
// 不發送廣播時,在飛行模式下,Android 2.2.1上測試無法關閉飛行模式。
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
// intent.putExtra("Sponsor", "Sodino");
// 2.3及以后,需設置此狀態,否則會一直處於與運營商斷連的情況
intent.putExtra("state", setAirPlane);
context.sendBroadcast(intent);
}
}
WiFi、GPRS、飛行模式的開啟、關閉以及一些狀態的檢測
