如何以编程方式启用/关闭移动数据

Aru*_*mar 2 performance android android-intent android-fragments android-activity

在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);
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*kla 10

您无法在android 4.4上方开启/关闭programmaticaly上的移动数据.出于安全原因,它已被停止,而您可以要求用户使用对话框启用移动数据,然后如果他启用您可以执行您的任务.


pen*_*nta 5

您无法以编程方式启用Internet连接,但是您可以检查是否存在Internet连接,如果不存在,则可以告诉用户启用Internet连接。

下面的代码可以做到这一点。

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();
}
Run Code Online (Sandbox Code Playgroud)