如何启动手机互联网设置对话框?

时间:2015-12-03 13:34:54

标签: android dual-sim

我试图设置移动数据。但它只适用于SIM 1

public static void setMobileData(Context context, boolean isEnabled) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {

    ConnectivityManager conman = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    @SuppressWarnings("rawtypes")
    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());

    Class[] cArg = new Class[2];
    cArg[0] = String.class;
    cArg[1] = Boolean.TYPE;
    Method setMobileDataEnabledMethod;

    setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", cArg);

    Object[] pArg = new Object[2];
    pArg[0] = context.getPackageName();
    pArg[1] = isEnabled;
    setMobileDataEnabledMethod.setAccessible(true);
    setMobileDataEnabledMethod.invoke(iConnectivityManager, pArg);
}

public static void setMobileData2(Context context, boolean isEnabled) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException {
    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, isEnabled);
}

public static boolean setMobileData3(Context context, boolean isEnable) {
    boolean mobileDataAllowed = Settings.Secure.putInt(context.getContentResolver(), "mobile_data", isEnable?1:0);
    return mobileDataAllowed;
}

但现在我只想推出默认的 移动选择对话框 。如果您有任何想法启动该对话框让我知道..提前感谢。

3 个答案:

答案 0 :(得分:3)

你必须开始这样的设置的意图。

startActivityForResult(new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS), 0);

'注释' 还有WIFI的设置等等。可以根据需要进行探索。像这样

android.provider.Settings.ACTION_WIFI_SETTINGS

答案 1 :(得分:3)

仅在android lollipop 5.1中添加了多SIM支持。在此之前,不同的手机制造商有自己的定制实现,以支持多SIM卡和相应的设置。因此,如果您的目标是通用解决方案,则无法实现。即使在5.1上,也没有直接的意图来启动这个特定的设置,但使用你可能实现的黑客,只要制造商应该只使用谷歌解决方案,否则它将无法工作。

答案 2 :(得分:1)

我试图通过我的应用程序打开互联网设置但默认功能是它只打开互联网默认的SIM卡即Sim 1.你必须使用意图将用户重定向到设置屏幕

Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);                 startActivity(意向);