转载: http://blog.csdn.net/tu_bingbing/article/details/8469871
近段时间由于要对手机网络状况进行判断、开启和关闭,从网上找了些资料,现整理如下
包含了对WiFi、GPRS、飞行模式的开启、关闭以及一些状态的检测,在小米和三星平板上测试均通过
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
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); } }
时间: 2024-10-14 04:24:10