1、判断移动数据是否可用
1) 5.0以前使用ConnectivityManager.getMobileDataEnabled及setMobileDataEnabled:
private ConnectivityManager mConnMgr;
mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mConnMgr.getMobileDataEnabled()
由于此方法是hide方法,可以使用反射方式调用此方法,或者改为非hide方法后重新编译framework.jar后使用。
2)5.0以后可以使用TelephonyManager.getDataEnabled及setDataEnabled :
mTelMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
mTelMgr.getDataEnabled()
由于此方法是hide方法,可以使用反射方式调用此方法,或者改为非hide方法后重新编译framework.jar后使用。
TelephonyManager mTelMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); try { Class<?> telMgrClass = Class.forName(mTelMgr.getClass().getName()); Method getDataEnabledMethod = telMgrClass.getDeclaredMethod("getDataEnabled"); getDataEnabledMethod.setAccessible(true); return (Boolean) getDataEnabledMethod.invoke(mTelMgr); } catch (Exception e) { e.printStackTrace(); }
2、请求数据连接:
3、网络状态:ConnectivityManager 中getNetworkInfo(int networkType)改为getNetworkInfo(Network network)。ConnectivityManager中的startUsingNetworkFeature及stopUsingNetworkFeature在5.0以后不可用,改为使用requestNetwork
NetworkRequest mNetReq = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) .build(); } mConnMgr.requestNetwork(mNetReq, new ConnectivityManager.NetworkCallback(){ @Override public void onAvailable(Network network) { super.onAvailable(network); } });