Rajendar
Rajendar

Reputation: 881

How to call Wi-Fi settings screen from my application using Android

Normally I am getting Wi-Fi setting screen on the emulator by clicking on the Settings > Wireless controls > wifi settings. I need to go directly to the Wi-Fi settings screen from my program when pressing on the Wi-Fi button which I have created. Contacts, Call Logs we can handle by using Intent.setData(android.provider.contacts...........). Is there any way to open settings sub-menus/menu from an android program?
Please give me advise or sample code on this.

Upvotes: 88

Views: 124068

Answers (9)

Maher
Maher

Reputation: 372

Not all devices have same Wifi settings package name and class, I use this code to open the wifi settings page on most Android devices:

            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));
            }

Upvotes: 2

Keselme
Keselme

Reputation: 4249

If you're on Android 10, and your goal is to make the user to turn on the WiFi, you don't have to actually navigate to the Wifi settings screen anymore. You can use Settings Pannel

an API which allows apps to show settings to users in the context of their app.

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

Upvotes: 12

Hitesh Sahu
Hitesh Sahu

Reputation: 45062

I have implemented it like this in my app:

     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());
    }

Upvotes: 1

Rahul Patil
Rahul Patil

Reputation: 129

on button click click Listner

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

Upvotes: 2

Jayakrishnan
Jayakrishnan

Reputation: 4667

Here is the code snippet to open wifi settings page

 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);

Upvotes: 1

CommonsWare
CommonsWare

Reputation: 1006664

Look at android.provider.Settings for a series of Intent actions you can use to launch various settings screens (e.g., ACTION_WIFI_SETTINGS).

EDIT: Add the coding line.

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));

Upvotes: 181

Victor Ruiz.
Victor Ruiz.

Reputation: 1722

Just have to call an intent with a context, try this:

startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));

Upvotes: 27

kim myoungho
kim myoungho

Reputation: 301

example

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));
}

Upvotes: 30

kingston
kingston

Reputation: 11419

If you want to do it from the xml file:

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

This will show an entry in your settings that will call the platform's settings activity

Upvotes: 11

Related Questions