Android(安卓)5.0以上移动网络开关
16lz
2021-12-04
Android 5.0以前使用ConnectivityManager通过反射两个方法setMobileDataEnabled和getMobileDataEnabled来控制移动网络开和关。
Android 5.0以后使用TelephonyMananger类通过反射获取setDataEnabled和getDataEnabled类完成操作。
注意:需要使用系统权限:android:sharedUserId=”android.uid.system”。
public void setMobileDataState(Context context, boolean enabled) { TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Method setDataEnabled = telephonyService.getClass().getDeclaredMethod("setDataEnabled",boolean.class); if (null != setDataEnabled) { setDataEnabled.invoke(telephonyService, enabled); } } catch (Exception e) { e.printStackTrace(); }}public boolean getMobileDataState(Context context) { TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Method getDataEnabled = telephonyService.getClass().getDeclaredMethod("getDataEnabled"); if (null != getDataEnabled) { return (Boolean) getDataEnabled.invoke(telephonyService); } } catch (Exception e) { e.printStackTrace(); } return false;}1 "android.permission.MODIFY_PHONE_STATE" />
自适应Android5.0以前及以后的代码:
TelephonyManager mTelephonyManager = (TelephonyManager)context .getSystemService(Context.TELEPHONY_SERVICE);ConnectivityManager mConnectivityManager =(ConnectivityManager)context .getSystemService(Context.CONNECTIVITY_SERVICE);
public void setDataEnable(){ Object object = Build.VERSION.SDK_INT >= 21 ? mTelephonyManager : mConnectivityManager; String methodName = Build.VERSION.SDK_INT >= 21 ? "setDataEnabled" : "setMobileDataEnabled"; Method setMobileDataEnable; try { setMobileDataEnable = object.getClass().getMethod(methodName, boolean.class); setMobileDataEnable.invoke(object, true); } catch (Exception e) { e.printStackTrace(); } }
public void checkConnectState(){ while(true){ Object object = Build.VERSION.SDK_INT >= 21 ? mTelephonyManager : mConnectivityManager; String methodName = Build.VERSION.SDK_INT >= 21 ? "getDataEnabled" : "getMobileDataEnabled"; Method getMobileDataEnable; boolean isDataEnabled = false; try { getMobileDataEnable = object.getClass().getMethod(methodName, null); isDataEnabled = (Boolean) getMobileDataEnable.invoke(object, null); } catch (Exception e) { e.printStackTrace(); } if(isDataEnabled){ break; }else{ sleep(200); } }}
更多相关文章
- vim+ctags+cscope 打造Android源码阅读工具
- Android(安卓)中使用自定义字体的方法
- android使用ant编译找不到apkbuilder.jar的错误的解决方法
- Android(安卓)入门 和 环境搭建
- Android系统自带主题的使用及自定义主题
- Android(安卓)入门 和 环境搭建
- TextView中ellipsize属性焦点异常处理
- android 流量统计实现思路
- UI组件之AdapterView及其子类(二)GridView网格视图的使用