我想启动移动网络设置屏幕,以便用户可以启用/禁用 3g 或数据连接。谁能告诉我我需要使用哪个意图来启动活动。我用了
Intent in = new Intent(android.provider.Settings.ACTION_NETWORK_OPERATOR_SETTINGS )
和
Intent in = new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS ).
但这两个都不起作用。
我想启动移动网络设置屏幕,以便用户可以启用/禁用 3g 或数据连接。谁能告诉我我需要使用哪个意图来启动活动。我用了
Intent in = new Intent(android.provider.Settings.ACTION_NETWORK_OPERATOR_SETTINGS )
和
Intent in = new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS ).
但这两个都不起作用。
它们不起作用,因为我认为在 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);
替换NetworkSetting
为Settings
DATA_ROAMING_SETTINGS
错误打开移动网络设置菜单中描述了另一种类似的解决方案
更新
我最近对此进行了测试,似乎直到 API 级别 15 仍需要此解决方法。由于 API 级别 16,问题中的意图似乎可以正常工作。
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)
{}
}
}
我会尽力回答,尽管这个问题是几年前提出的。如果您要做的是启动“数据使用”屏幕。试试这段代码。它对我有用。
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);
有两种可能:
它调出整体网络设置,用户可以从那里转到移动网络
startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
如Zharf
建议:
它调出移动网络设置,用户可以从那里启用网络
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.phone","com.android.phone.NetworkSetting");
startActivity(intent);
在我的情况下(android 9),这个意图直接落在移动数据设置上:
val intent = Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)
context.startActivity(intent)
您可以将它用于 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))
}
https://developer.android.com/reference/android/provider/Settings.Panel#ACTION_INTERNET_CONNECTIVITY
专注于移动数据设置:
startActivity(Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS))
专注于 Wifi 设置:
startActivity( Intent(android.provider.Settings.ACTION_WIFI_SETTINGS))