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


77

通常,我会通过单击来在模拟器上获得Wi-Fi设置屏幕Settings > Wireless controls > wifi settings。按下我创建的Wi-Fi按钮时,我需要从程序直接进入Wi-Fi设置屏幕。我们可以使用Intent.setData(android.provider.contacts ......)处理的联系人,呼叫日志。有什么办法可以从Android程序中打开设置子菜单/菜单吗?
请给我建议或示例代码。

Answers:


165

查看可用于启动各种设置屏幕(例如)android.provider.Settings的一系列Intent操作ACTION_WIFI_SETTINGS

编辑:添加编码行。

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));


28
更具体地说,android.app.activity.startActivity(new android.content.Intent.Intent(android.provider.settings.Settings.ACTION_WIFI_SETTINGS)); 或适当使用startActivity(新意图(Settings.ACTION_WIFI_SETTINGS));
亚历克斯·科恩

2
你觉得FLAG_ACTIVITY_NEW_TASK需要的
Mr_and_Mrs_D

1
@Mr_and_Mrs_D:可能。Intents当设置应用程序已在内存中时,我可以看到设置应用程序在哪里可能无法正确处理这些设置,但是我没有尝试过这种特定情况。
CommonsWare

3
要打开常规无线设置,请使用以下方法:startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
MBH 2015年

2
@ patrickjason91:“如果应用程序的Intent调用可以控制某些配置,以显示WiFi设置或一般而言其他任何设置屏幕的方式?” -一般而言,并且未使用任何已记录的附加功能。
CommonsWare,

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 2015年


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动作对我有用。
迭戈

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
在OI中无法正常工作,并不断收到“ android.content.ActivityNotFoundException:无法找到显式活动类{com.android.settings / com.android.settings.WirelessSettings};您是否已在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());
    }

0

如果您使用的是Android 10,并且您的目标是让用户打开WiFi,那么您实际上不再需要导航至Wifi设置屏幕。您可以使用“设置面板”

一个API,允许应用程序在用户的应用程序上下文中向用户显示设置。

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.