如何从我的代码启动移动网络设置屏幕

san*_*eep 28 android

我想启动移动网络设置屏幕,以便用户可以启用/禁用3g或数据连接.任何人都可以告诉我我需要用于启动活动的意图.我用了

Intent in = new Intent(android.provider.Settings.ACTION_NETWORK_OPERATOR_SETTINGS ) 
Run Code Online (Sandbox Code Playgroud)

Intent in = new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS  ). 
Run Code Online (Sandbox Code Playgroud)

但这两个都不起作用.

Zha*_*arf 38

他们不会工作,因为我认为在2.3中有一个修复过的错误.

请参阅https://review.source.android.com/#/c/22229/

您可以使用(对于NETWORK_OPERATOR_SETTINGS)绕过此

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.phone", "com.android.phone.NetworkSetting");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

更换NetworkSettingSettings的DATA_ROAMING_SETTINGS

错误打开移动网络设置菜单中描述了另一个类似的解决方案

UPDATE

我最近对此进行了测试,似乎这个解决方法仍然需要API级别15.从API级别16开始,问题中的意图似乎正常工作.


Ali*_*eri 8

public class SettingsScreen
{

protected static void _showSettingScreen(String intentStr)
{
    try
    {
        Intent intent = new Intent(intentStr);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Reference.getAppContext().startActivity(intent);
    }
    catch (Exception e) {Reference.showToast(e.toString(), true);}
}

public static void showSettingScreen()
{
    _showSettingScreen("android.settings.SETTINGS");
}

public static void showAPNScreen()
{
    _showSettingScreen("android.settings.APN_SETTINGS");
}

public static void showLocationScreen()
{
    _showSettingScreen("android.settings.LOCATION_SOURCE_SETTINGS");
}

public static void showSecurityScreen()
{
    _showSettingScreen("android.settings.SECURITY_SETTINGS");
}

public static void showWifiScreen()
{
    _showSettingScreen("android.settings.WIFI_SETTINGS");
}

public static void showBluetoothScreen()
{
    _showSettingScreen("android.settings.BLUETOOTH_SETTINGS");
}

public static void showDateScreen()
{
    _showSettingScreen("android.settings.DATE_SETTINGS");
}

public static void showSoundScreen()
{
    _showSettingScreen("android.settings.SOUND_SETTINGS");
}

public static void showDisplayScreen()
{
    _showSettingScreen("android.settings.DISPLAY_SETTINGS");
}

public static void showApplicationScreen()
{
    _showSettingScreen("android.settings.APPLICATION_SETTINGS");
}

public static void showNetworkSettingScreen()
{
    showDataRoamingScreen();
}

public static void showNetworkOperatorScreen()
{
    if(Reference.getSystemOptions().VERSION_SDK_INT > 15)
    {
        _showSettingScreen("android.settings.NETWORK_OPERATOR_SETTINGS");
    }
    else
    {
        Intent intent=new Intent(android.provider.Settings.ACTION_SETTINGS);
        intent.setClassName("com.android.phone", "com.android.phone.NetworkSetting");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Reference.getAppContext().startActivity(intent);
    }
}

public static void showDataRoamingScreen()
{
    if(Reference.getSystemOptions().VERSION_SDK_INT > 15)
    {
        _showSettingScreen("android.settings.DATA_ROAMING_SETTINGS");
    }
    else
    {
        Intent intent=new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);
        ComponentName cName = new ComponentName("com.android.phone","com.android.phone.Settings");
        intent.setComponent(cName);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Reference.getAppContext().startActivity(intent);
    }
}

public static void showDataMobileScreen()
{
    if(Reference.getSystemOptions().VERSION_SDK_INT > 15)
    {
        Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);//android.provider.Settings.ACTION_SETTINGS //Intent.ACTION_MAIN
        intent.setClassName("com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Reference.getAppContext().startActivity(intent);
    }
    else
    {
        showDataRoamingScreen();
    }
}

public static void showNotificationScreen()
{
    _showSettingScreen("android.settings.NOTIFICATION_SETTINGS");
}

public static void showBatterySaverScreen()
{
    _showSettingScreen("android.settings.BATTERY_SAVER_SETTINGS");
}

public static void showNfcScreen()
{
    _showSettingScreen("android.settings.NFC_SETTINGS");
}

public static void showInternalStorageScreen()
{
    _showSettingScreen("android.settings.INTERNAL_STORAGE_SETTINGS");
}

public static void showDictionarySettingScreen()
{
    _showSettingScreen("android.settings.USER_DICTIONARY_SETTINGS");
}

public static void showManageApplicationsScreen()
{
    _showSettingScreen("android.settings.MANAGE_APPLICATIONS_SETTINGS");
}

public static void showManageAllApplicationsScreen()
{
    _showSettingScreen("android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS");
}

public static void showMemoryCardScreen()
{
    _showSettingScreen("android.settings.MEMORY_CARD_SETTINGS");
}

public static void showAirPlaneScreen()
{
    if(Reference.getSystemOptions().VERSION_SDK_INT > 16)
    {
        if(Reference.getSystemOptions().BRAND.equalsIgnoreCase("Lenovo"))
        {
            showSettingScreen();
        }
        else
        {
            _showSettingScreen("android.settings.WIRELESS_SETTINGS");
        }
    }
    else
    {
        _showSettingScreen("android.settings.AIRPLANE_MODE_SETTINGS");
    }
}

public static void showWirelessScreen()
{
    _showSettingScreen("android.settings.WIRELESS_SETTINGS");
}

public static void showWifiScreenSafe()
{
    try
    {
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings");
        intent.setComponent(cn);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Reference.getAppContext().startActivity(intent);
    }
    catch (Exception e)
        {}
}
}
Run Code Online (Sandbox Code Playgroud)


and*_*per 8

您可以将其用于 Android API 29,它显示了一个用于切换 Wifi/mobile-data 的小 UI:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    startActivity(Intent(android.provider.Settings.Panel.ACTION_INTERNET_CONNECTIVITY))
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

https://developer.android.com/reference/android/provider/Settings.Panel#ACTION_INTERNET_CONNECTIVITY

重点关注移动数据设置:

startActivity(Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS))
Run Code Online (Sandbox Code Playgroud)

重点关注Wifi设置:

startActivity( Intent(android.provider.Settings.ACTION_WIFI_SETTINGS))
Run Code Online (Sandbox Code Playgroud)


San*_*992 7

我会试着回答一下,几年前这个问题被问到这个事实.如果你要做的是启动"数据使用"屏幕.试试这段代码吧.它对我有用.

Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setComponent(new ComponentName("com.android.settings",
                "com.android.settings.Settings$DataUsageSummaryActivity"));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
Run Code Online (Sandbox Code Playgroud)


Shy*_*dda 5

有两种可能:

它调出整体网络设置,用户可以从那里转到移动网络

startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); 
Run Code Online (Sandbox Code Playgroud)

Zharf建议:

它调出移动网络设置,用户可以从那里启用网络

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.phone","com.android.phone.NetworkSetting");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)