2014-09-20 24 views
0

我想通過編程關閉網絡數據。我嘗試過「以下代碼」,但只關閉了未設置「移動數據」設置中的切換關閉的網絡數據。如何通過編程關閉移動網絡數據

try { 
    final ConnectivityManager conman = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final java.lang.reflect.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); 
    // (true) to enable 3G; (false) to disable it. 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, false); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

回答

0

使用此代碼關閉同時移動網絡:

public boolean getMobileDataEnabled() throws Exception { 
    ConnectivityManager mcm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    Class ownerClass = mcm.getClass(); 
    Method method = ownerClass.getMethod("getMobileDataEnabled"); 
    return (Boolean)method.invoke(mcm); 
} 

public void setMobileDataEnabled(boolean enabled) throws Exception { 
    ConnectivityManager mcm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    Class ownerClass = mcm.getClass(); 
    ownerClass.getMethod("setMobileDataEnabled",boolean.class).invoke(mcm, enabled); 
} 

try { 
    boolean isMobileDataEnable = getMobileDataEnabled(); 
    if (isMobileDataEnabled) { 
     setMobileDataEnabled(!isMobileDataEnable); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

AndroidManifest.xml添加

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
+0

它不工作 – abhi 2014-09-20 08:37:27

相關問題