这个是网上找的,经过自己整理。由于android并未公开这个类,因此如果要打开/关闭数据,需要通过反射
16/09/29注:5.0以上无效
MobileDataSwitcher.java
import java.lang.reflect.Method;
import android.content.Context;
import android.net.ConnectivityManager;
public class MobileDataSwitcher {
@SuppressWarnings({ "rawtypes", "unchecked" })
public void setMobileData(Context pContext, boolean pBoolean)
{
try
{
ConnectivityManager mConnectivityManager = (ConnectivityManager) pContext.getSystemService(Context.CONNECTIVITY_SERVICE);
Class ownerClass = mConnectivityManager.getClass();
Class[] argsClass = new Class[1];
argsClass[0] = boolean.class;
Method method = ownerClass.getMethod("setMobileDataEnabled", argsClass);
method.invoke(mConnectivityManager, pBoolean);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回手机移动数据的状态
* @param pContext
* @param arg 默认填null
* @return true 连接 false 未连接
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean getMobileDataState(Context pContext, Object[] arg)
{
try
{
ConnectivityManager mConnectivityManager = (ConnectivityManager) pContext.getSystemService(Context.CONNECTIVITY_SERVICE);
Class ownerClass = mConnectivityManager.getClass();
Class[] argsClass = null;
if (arg != null) {
argsClass = new Class[1];
argsClass[0] = arg.getClass();
}
Method method = ownerClass.getMethod("getMobileDataEnabled", argsClass);
Boolean isOpen = (Boolean) method.invoke(mConnectivityManager, arg);
return isOpen;
} catch (Exception e) {
return false;
}
}
}
上面这个类有两个方法,一个是设置数据是否打开,另一个是判断是否已经打开,调用方法如下
if(mMobileDataSwitcher.getMobileDataState(mContext, null))
{
//mData.setBackgroundResource(R.drawable.tool_data_off);
mMobileDataSwitcher.setMobileData(mContext, false);
}
else
{
//mData.setBackgroundResource(R.drawable.tool_data_on);
mMobileDataSwitcher.setMobileData(mContext, true);
}
注:需要添加如下权限