禁用移动数据 [英] Disable Mobile Data
本文介绍了禁用移动数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要以编程方式禁用移动数据连接
我跟着这个
私人无效setMobileDataEnabled(上下文的背景下,布尔启用){
最后ConnectivityManager赌侠=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
最后类conmanClass =的Class.forName(conman.getClass()的getName());
最后一个字段iConnectivityManagerField = conmanClass.getDeclaredField(MSERVICE);
iConnectivityManagerField.setAccessible(真正的);
最终目标iConnectivityManager = iConnectivityManagerField.get(赌侠);
最后类iConnectivityManagerClass =的Class.forName(iConnectivityManager.getClass()的getName());
最后一个方法setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod(setMobileDataEnabled,Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(真正的);
setMobileDataEnabledMethod.invoke(iConnectivityManager,启用);
}
<一个href="http://stackoverflow.com/questions/3644144/how-to-disable-mobile-data-on-android">StackOverFlow链接
但我得到一个错误显示java.lang.NullPointerException:需要的println消息
登录
09-05 18:20:29.081:E / AndroidRuntime(736):致命异常:定时器0
09-05 18:20:29.081:E / AndroidRuntime(736):显示java.lang.NullPointerException:需要的println消息
09-05 18:20:29.081:E / AndroidRuntime(736):在android.util.Log.println_native(本机方法)
09-05 18:20:29.081:E / AndroidRuntime(736):在android.util.Log.d(Log.java:138)
09-05 18:20:29.081:E / AndroidRuntime(736):在com.anand.batterysaver.BatterySaverActivity.checkScreenStatus(BatterySaverActivity.java:69)
09-05 18:20:29.081:E / AndroidRuntime(736):在com.anand.batterysaver.BatterySaverActivity $ 1.运行(BatterySaverActivity.java:43)
09-05 18:20:29.081:E / AndroidRuntime(736):在java.util.Timer中的$ TimerImpl.run(Timer.java:284)
checkScreenStatus功能
公共无效checkScreenStatus(){
电源管理器电源管理器;
GetProcessList名单=新GetProcessList();
ConnectivityManager厘米=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
电源管理器=(电源管理器)this.getSystemService(Context.POWER_SERVICE);
如果(powermanager.isScreenOn()==假)
{
Log.d(电源状态,,锁定所有设置);
布尔gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState()== NetworkInfo.State.CONNECTED;
Log.d(锁定gprsStatus,将String.valueOf(gprsstatus));
如果(gprsstatus ==真){
尝试{
list.setDataEnabled(getApplicationContext(),FALSE);
}赶上(例外五){Log.d(异常,e.getMessage()); }
}
}其他{
Log.d(电源状态,,恢复全部);
gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState()== NetworkInfo.State.CONNECTED;
Log.d(锁定gprsStatus,将String.valueOf(gprsstatus));
如果(gprsstatus ==真){
TelephonyManager GPRS =(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
如果(gprs.getDataState()== TelephonyManager.DATA_CONNECTED){
Log.d(上的GPRS,);
}
}
}
}
解决方案
试试这个: 这工作(这是我的应用程序在市场上之一的$ C $ C)
私有静态无效updateAPN(上下文paramContext,布尔启用){
尝试 {
ConnectivityManager connectivityManager =(ConnectivityManager)paramContext.getSystemService(连接);
方法setMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod(setMobileDataEnabled,Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(真正的);
setMobileDataEnabledMethod.invoke(connectivityManager,使能);
}赶上(例外五){
e.printStackTrace();
}
}
奖励:
私有静态布尔isAPNEnabled(上下文paramContext){
尝试 {
的NetworkInfo的NetworkInfo =((ConnectivityManager)paramContext.getSystemService(连接))getActiveNetworkInfo()。
返回networkInfo.isConnected();
}赶上(例外五){
返回false;
}
}
对了,别忘了这一点:
使用-权限的Android:名称=android.permission.ACCESS_NETWORK_STATE
使用-权限的Android:名称=android.permission.CHANGE_NETWORK_STATE
使用-权限的Android:名称=android.permission.INTERNET对
使用-权限的Android:名称=android.permission.READ_PHONE_STATE
i need to disable mobile data connection programmatically
i followed this
private void setMobileDataEnabled(Context context, boolean enabled) {
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField.get(conman);
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
but i got a Error "java.lang.NullPointerException:Println need a message"
Log
09-05 18:20:29.081: E/AndroidRuntime(736): FATAL EXCEPTION: Timer-0
09-05 18:20:29.081: E/AndroidRuntime(736): java.lang.NullPointerException: println needs a message
09-05 18:20:29.081: E/AndroidRuntime(736): at android.util.Log.println_native(Native Method)
09-05 18:20:29.081: E/AndroidRuntime(736): at android.util.Log.d(Log.java:138)
09-05 18:20:29.081: E/AndroidRuntime(736): at com.anand.batterysaver.BatterySaverActivity.checkScreenStatus(BatterySaverActivity.java:69)
09-05 18:20:29.081: E/AndroidRuntime(736): at com.anand.batterysaver.BatterySaverActivity$1.run(BatterySaverActivity.java:43)
09-05 18:20:29.081: E/AndroidRuntime(736): at java.util.Timer$TimerImpl.run(Timer.java:284)
checkScreenStatus Function
public void checkScreenStatus(){
PowerManager powermanager;
GetProcessList list = new GetProcessList();
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
powermanager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
if (powermanager.isScreenOn() == false)
{
Log.d("PowerStatus","Lock All Settings");
boolean gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED;
Log.d("Locked gprsStatus",String.valueOf(gprsstatus));
if(gprsstatus == true){
try{
list.setDataEnabled(getApplicationContext(), false);
}catch (Exception e) {Log.d("Exception",e.getMessage()); }
}
}else{
Log.d("PowerStatus","Resume All");
gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED;
Log.d("Locked gprsStatus",String.valueOf(gprsstatus));
if(gprsstatus == true){
TelephonyManager gprs = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
if(gprs.getDataState() == TelephonyManager.DATA_CONNECTED){
Log.d("Gprs","on");
}
}
}
}
解决方案
Try this : This works (this is a code of one of my apps on the market)
private static void updateAPN(Context paramContext, boolean enable) {
try {
ConnectivityManager connectivityManager = (ConnectivityManager) paramContext.getSystemService("connectivity");
Method setMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(connectivityManager, enable);
} catch (Exception e) {
e.printStackTrace();
}
}
Bonus :
private static boolean isAPNEnabled(Context paramContext) {
try {
NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo();
return networkInfo.isConnected();
} catch (Exception e) {
return false;
}
}
By the way, don't forget this :
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"
uses-permission android:name="android.permission.INTERNET"
uses-permission android:name="android.permission.READ_PHONE_STATE"
这篇关于禁用移动数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文