Як зателефонувати на екран налаштувань Wi-Fi із моєї програми за допомогою Android


77

Зазвичай я отримую екран налаштування Wi-Fi на емуляторі, натискаючи на Settings > Wireless controls > wifi settings. Мені потрібно перейти безпосередньо до екрана налаштувань Wi-Fi зі своєї програми, натискаючи на створену мною кнопку Wi-Fi. Контакти, журнали викликів, з якими ми можемо обробляти за допомогою Intent.setData (android.provider.contacts ...........). Чи є спосіб відкрити підменю / меню налаштувань програми Android?
Будь ласка, дайте мені пораду або зразок коду з цього приводу.

Відповіді:


165

Подивіться на android.provider.Settingsряд Intentдій, які можна використовувати для запуску різних екранів налаштувань (наприклад, ACTION_WIFI_SETTINGS).

EDIT: Додайте рядок кодування.

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));


28
якщо бути більш конкретним, android.app.activity.startActivity (новий android.content.Intent.Intent (android.provider.settings.Settings.ACTION_WIFI_SETTINGS)); або при правильному використанні , startActivity (нове Намір (Settings.ACTION_WIFI_SETTINGS));
Alex Cohn

2
ти вважаєш, що FLAG_ACTIVITY_NEW_TASKце потрібно ?
Mr_and_Mrs_D

1
@Mr_and_Mrs_D: Можливо. Я бачу, де програма Налаштування може не працювати з ними Intentsналежним чином, коли програма Налаштування вже є в пам'яті, але я не пробував цей конкретний сценарій.
CommonsWare

3
для відкриття загальних бездротових налаштувань використовуйте це: startActivity (новий намір (Settings.ACTION_WIRELESS_SETTINGS));
MBH

2
@ patrickjason91: "якщо можливо, що виклик наміру програми може керувати деякою конфігурацією, як відображатимуться налаштування 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, використовуйте це: Налаштування.
ACTION_WIRELESS_SETTINGS

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дії.
Дієго

1

Ось фрагмент коду для відкриття сторінки налаштувань Wi-Fi

 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

на кнопці натисніть кнопку Listner

startActivityForResult (новий намір (Settings.ACTION_WIFI_SETTINGS), 0);


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 і ваша мета - змусити користувача увімкнути Wi-Fi, вам більше не доведеться переходити на екран налаштувань Wi-Fi. Ви можете скористатися панеллю налаштувань

API, що дозволяє програмам показувати налаштування користувачам у контексті їх програми.

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

0

Не всі пристрої мають однакову назву та клас параметрів Wi-Fi, я використовую цей код, щоб відкрити сторінку налаштувань Wi-Fi на більшості пристроїв Android:

            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));
            }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.