如何在我的Android应用程序中调用Wi-Fi设置屏幕

83

通常,我通过点击设置 > 无线控制 > WIFI设置在模拟器上获取Wi-Fi设置屏幕。当按下我创建的Wi-Fi按钮时,我需要直接从我的程序进入Wi-Fi设置屏幕。联系人、通话记录我们可以使用Intent.setData(android.provider.contacts……)来处理。有没有办法从Android程序中打开设置子菜单/菜单?
请给我建议或示例代码。


https://dev59.com/NJrga4cB1Zd3GeqPiB-R - Goran Horia Mihail
9个回答

177

请查看android.provider.Settings,其中包含一系列可以用于启动各种设置屏幕(例如ACTION_WIFI_SETTINGS)的Intent操作。

编辑:添加代码行。

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));


31
更加具体地说,android.app.activity.startActivity(new android.content.Intent.Intent(android.provider.settings.Settings.ACTION_WIFI_SETTINGS));或者更为简洁的写法是:startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); - Alex Cohn
2
你认为 FLAG_ACTIVITY_NEW_TASK必需的吗? - Mr_and_Mrs_D
1
@Mr_and_Mrs_D:有可能。我可以理解当设置应用程序已经在内存中时,它可能无法正确处理这些“意图”,但我还没有尝试过这种特定的情况。 - CommonsWare
3
打开通用的无线设置,请使用以下代码:startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));。 - MBH
2
@patrickjason91: "如果该应用程序的Intent调用可以控制一些配置以控制WiFi设置,或者其他任何通用设置屏幕的显示方式,这是否可能?"--不是通用的,也不使用任何已记录的附加信息。 - CommonsWare
显示剩余6条评论

30

例子

ConnectivityManager manager = (ConnectivityManager) 
        getSystemService(MainActivity.CONNECTIVITY_SERVICE);
/*
 * 3G confirm
 */
Boolean is3g = manager.getNetworkInfo(
        ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
/*
 * wifi confirm
 */
Boolean isWifi = manager.getNetworkInfo(
        ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
if (is3g) {
    textView.setText("3G");
} else if (isWifi) {
    textView.setText("wifi");
} else {
    textView.setText("nothing");
    // Activity transfer to wifi settings
    startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
}

要打开3G和WIFI设置,请使用以下代码:Settings.ACTION_WIRELESS_SETTINGS - MBH

27

只需使用上下文调用一个意图,试试这个:

startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));

11

如果您想从XML文件中完成此操作:

    <PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:key="@string/setting_key"
        android:summary="@string/setting_summary"
        android:title="@string/setting_title" >

        <intent 
            android:action="android.settings.WIRELESS_SETTINGS"/>
    </PreferenceScreen>

这将在您的设置中显示一个条目,该条目将调用平台的设置活动


2
我使用 android.settings.WIFI_SETTINGS 操作可以正常工作。 - Diego

11
如果你的应用目标是要让用户打开WiFi且设备运行在安卓10系统上,现在你不必再跳转到WiFi设置页面了。你可以使用“设置面板”(Settings Panel)API,该API允许应用在其上下文中向用户显示设置。
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

2

点击按钮监听器

startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS), 0);

当按钮被点击时,可以使用上述代码来打开WiFi设置界面。

2

并非所有设备都具有相同的Wifi设置包名称和类,我使用此代码在大多数Android设备上打开Wifi设置页面:

            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);
                startActivity(intent);
            } catch (ActivityNotFoundException ignored) {
                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
            }

1

这是打开WiFi设置页面的代码片段

 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);
        startActivity( intent);

3
在 O 版本中无法正常工作,我一直收到“android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/com.android.settings.WirelessSettings}; have you declared this activity in your AndroidManifest.xml? ”的错误提示。 - JesseBoyd

1

我在我的应用程序中是这样实现的:

     if (Connectivity.isConnected(this)) {
                SERVER_IP = Connectivity.getIPAddress(true)
            } else {
                SERVER_IP = "Not Connected to Network"
                Snackbar.make(appRoot, "Not Connected to Network", 
                              Snackbar.LENGTH_INDEFINITE)
                              .setAction("Open Settings") {
                   //open network settings
                  startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))
                        }.show()
            }
        }


public static boolean isConnected(Context context) {
        NetworkInfo info = Connectivity.getNetworkInfo(context);
        return (info != null && info.isConnected());
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接