Android網絡開啓、關閉整理

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、飛行模式的開啓、關閉以及一些狀態的檢測java

相關文章
相關標籤/搜索