2013-05-10 62 views
0

我試圖啓用/禁用移動數據連接。 我已經rIHaN JiTHiNEnable/Disable Mobile Data (GPRS) using code)使用此代碼,它完美的作品在Android 4.0,但它不會對我的Galaxy S(升級Froyo 2.2)...使用Froyo 2.2上的代碼啓用/禁用移動數據(GPRS)

有沒有一種方法來啓用/以編程方式禁用數據連接?

如果有人有任何想法,爲什麼它不適用於Froyo,將是非常有用的。據rIHaN JiTHiN,此代碼適用於所有Android版本...

回答

1

您可以檢查它是否是通過使用下面的代碼

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if (mMobile.isConnected()) { 
    //if internet connected 
} 

,如果它被禁用啓用或禁用,則可以啓用它通過使用這一

void turnData(boolean ON) throws Exception 
{ 

if(bv == Build.VERSION_CODES.FROYO) 
{ 

    Log.i("version:", "Found Froyo"); 
    try{ 
     Method dataConnSwitchmethod; 
     Class telephonyManagerClass; 
     Object ITelephonyStub; 
     Class ITelephonyClass; 
     TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 

     telephonyManagerClass = Class.forName(telephonyManager.getClass().getName()); 
    Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony"); 
    getITelephonyMethod.setAccessible(true); 
    ITelephonyStub = getITelephonyMethod.invoke(telephonyManager); 
    ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName()); 

    if (ON) { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("enableDataConnectivity"); 

    } else { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("disableDataConnectivity"); 
    } 
    dataConnSwitchmethod.setAccessible(true); 
    dataConnSwitchmethod.invoke(ITelephonyStub); 
    }catch(Exception e){ 
      Log.e("Error:",e.toString()); 
    } 

} 
else 
{ 
    Log.i("version:", "Found Gingerbread+"); 
    final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().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, ON); 
} 

,也是你的froyo設備上,不要忘記把這些東西加到manifest

android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_NETWORK_STATE 
android.permission.ACCESS_NETWORK_STATE 
android.permission.MODIFY_PHONE_STATE 
android.permission.READ_PHONE_STATE 
+0

嗨,謝謝你的回答!這是完美的工作。其實,我有一個Manifest權限問題(android.permission.UPDATE_DEVICE_STATS&android.permission.MODIFY_PHONE_STATE)。我已經修復了這樣的:http://stackoverflow.com/questions/13801984/permission-is-only-granted-to-system-app。 – Split 2013-05-10 19:51:39

+0

感謝指出它... – 2013-05-13 05:29:52

相關問題