2

在android中如何在Android 4.4及以上版本中啓用和禁用移動數據。 我已經使用這個代碼,但它不是在Android 4.4及以上版本的工作:如何以編程方式啓用/禁用移動數據

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); 
} 
+3

請訪問以下鏈接:http://stackoverflow.com/questions/26539445/the-setmobiledataenabled-method-is-no-longer-callable-as-of-android-l-and-later – KishuDroid

+0

喜阿倫,你可以接受我的回答 –

回答

5

開/關programmaticaly以上的Android 4.4。它已作出停止出於安全原因無法訪問移動數據,而不是你能請求用戶使用對話框啓用移動數據,然後如果他啓用,則可以完成您的任務。

+0

這不適用於Lolipop設備 –

+0

這就是我上面寫的,棒棒糖是5.0。請仔細閱讀 –

3

您無法以編程方式啓用互聯網連接,但您可以檢查互聯網連接是否存在,如果不存在,則可以通知用戶啓用互聯網連接。

下面的代碼會這樣做。

protected void createNetErrorDialog() { 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("You need internet connection for this app. Please turn on mobile network or Wi-Fi in Settings.") 
     .setTitle("Unable to connect") 
     .setCancelable(false) 
     .setPositiveButton("Settings", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
       startActivity(i); 
      } 
     } 
    ) 
    .setNegativeButton("Cancel", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       MyActivity.this.finish(); 
      } 
     } 
    ); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 
+0

這很好,但有沒有辦法不發送用戶設置,並通過點擊確定網絡會打開嗎?不要離開應用程序。 –

+0

@傑克是有可能的,谷歌它:-) – penta

相關問題