Android(安卓)代码控制手机数据网络的开关(5.0以上)
16lz
2021-01-26
Android 代码控制手机数据网络的开关
文章目录
- android 5.0以前
- 5.0以后
- Code
android 5.0以前
Android 5.0以前使用ConnectivityManager通过反射两个方法setMobileDataEnabled和getMobileDataEnabled来控制移动网络开和关。
5.0以后
Android 5.0以后使用TelephonyMananger类通过反射获取setDataEnabled和getDataEnabled类完成操作。
注意:Manifest需要使用添加android:sharedUserId=”android.uid.system“,系统需要root或者应用需要系统签名
Code
添加权限
android.permission.MODIFY_PHONE_STATE 权限限制已经改为系统权限
//适应Android5.0+
/** * 打开/关闭数据流量 * @param enabled */ public static void setDataEnabled(boolean enabled){ TelephonyManager telephonyManager = (TelephonyManager) Utils.getContext().getSystemService(Context.TELEPHONY_SERVICE); try { Method method = telephonyManager.getClass().getDeclaredMethod("setDataEnabled",boolean.class); if (method != null){ method.invoke(telephonyManager,enabled); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * true if mobile data is enabled * @return */ public static boolean isDataEnabled(){ TelephonyManager telephonyManager = (TelephonyManager) Utils.getContext().getSystemService(Context.TELEPHONY_SERVICE); try {// Method method = telephonyManager.getClass().getDeclaredMethod("isDataEnabled"); Method method = telephonyManager.getClass().getDeclaredMethod("getDataEnabled"); if (method != null){ return (boolean) method.invoke(telephonyManager); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return false; }
Note:经过系统签名的app已经证明在android 5.0上可用
参考:Android 通过代码实现控制数据网络的开关(仅适用于5.0以上)
Android中使用代码控制Wifi及数据连接网络开关
更多相关文章
- 一句话锁定MySQL数据占用元凶
- 在win7下搭建Android开发环碰到的两个问题
- Android(安卓)如何用HttpClient 以Get方式获取数据并添加http头
- Android(安卓)Parcel实现反向Binder通信
- android中的数据存储 收藏
- android 系统重启关机 方法 非常好的一篇文章
- Android(安卓)Framework下StageFright框架流程解读
- Android游戏设计中的音频控制——音量调整
- Android(安卓)Fragment与Fragment之间数据获取