近段时间由于要对手机网络状况进行判断、开启和关闭,从网上找了些资料,现整理如下
包含了对WiFi、GPRS、飞行模式的开启、关闭以及一些状态的检测,在小米和三星平板上测试均通过
- 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);
- }
- }