Android 用于打开移动数据的目的?

Android 用于打开移动数据的目的?,android,android-intent,Android,Android Intent,我可以使用android.settings.WIRELESS\u settings打开无线和蓝牙,但我应该使用什么来打开移动互联网 使用此方法(关闭wifi(如果打开wifi))并打开移动数据连接 public boolean isConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); Network

我可以使用
android.settings.WIRELESS\u settings
打开无线和蓝牙,但我应该使用什么来打开移动互联网

使用此方法(关闭wifi(如果打开wifi))并打开移动数据连接

  public boolean isConnected() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean NisConnected = activeNetwork != null && activeNetwork.isConnected();
        if (NisConnected) {
            //  if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE || activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                //  wifi.setWifiEnabled(true);//Turn on Wifi
                wifi.setWifiEnabled(false);//Turn off Wifi
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
                return true;
            else
                return false;
        }
        return false;
    }
使用完方法后,如果您可以看到internet未连接,则使用下面的方法打开移动数据

 private void setMobileDataEnabled(Context context, boolean enabled) {
        try {
            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);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
在清单中也需要权限

 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

从棒棒糖中可以看出,以编程方式启用移动数据是有限制的

使用此代码可了解移动数据的使用情况,您可以在其中打开/关闭移动数据:

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
    startActivity(intent);

检查是否有互联网


公共类NetworkUtil{

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;


public static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}

public static int getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    int status = -1;
    if (conn == NetworkUtil.TYPE_WIFI) {
        status = 1;
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
        status = 2;
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
        status = 0;
    }
    return status;
}`
然后,如果status==0,则启动此意图。
startActivity(新的意图(安卓.提供商.设置.操作\无线\设置))

非常类似于:此反射代码在Android 4.4.4 kitkat上不起作用。不,这不是回答问题。你说的是检查互联网和设置意图。操作无线设置不,他想打开移动互联网。是的!完全正确,但除非设备根目录,否则无法完成。你只能打开设置操作选项。有关更多信息,请参阅此[链接][此链接打开移动数据使用菜单,而不是移动数据菜单