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

相关问题