Android: Cách Bật / Tắt Wifi hoặc Kết nối Internet có lập trình


82

Sử dụng Lớp Trình quản lý Kết nối, chúng ta có thể truy cập vào Mạng Wi-Fi hoặc Mạng Internet:

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

// ARE WE CONNECTED TO THE NET
if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
  connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
  // ...
}

trong đó 01tương ứng đề cập đến kết nối di động và wifi

Nếu thiết bị Android của tôi được kết nối với cả hai, chúng tôi có thể chuyển đổi giữa bất kỳ mạng nào hay chúng tôi có thể tắt bất kỳ mạng nào không? Giống như sử dụng một hàm:

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);

Bạn có nhận được giải pháp nào cho tùy chọn vô hiệu hóa dữ liệu di động không?
Parthi

Câu trả lời:


183

Tôi biết cách bật hoặc tắt Wi-Fi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

tình trạng có thể ở đâu truehoặc falsetheo yêu cầu.

Biên tập:

Bạn cũng cần các quyền sau trong tệp kê khai của mình:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 

47
Cũng tại manifest:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover

2
Điều này có khác với wifiManager.reconnect () không? Điều gì về wifiManager.reassociate ()? Cũng trong cách tiếp cận ở trên nếu bạn muốn đặt lại WiFi, bạn có thể gọi wifiManager.setWifiEnabled (false) và wifiManager.setWifiEnabled (true) trở lại không? Hay bạn sẽ phải tắt nó trước, sau đó đợi một số tín hiệu (bộ thu phát sóng, v.v.) trước khi bật lại?
Marchy

Nếu bạn muốn giới thiệu hướng dẫn để chơi bóng sau đó của nó ở đây: demoadda.com/demo/android/...
Kishan Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”cũng cần thiết.
zionpi

Có thể điều khiển WiFi trong thiết bị M từ Ứng dụng không?
Nithinjith

30

Để bật WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(true);

Để tắt WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false);

Lưu ý: Để truy cập với trạng thái WiFi, chúng tôi phải thêm các quyền sau vào tệp AndroidManifest.xml:

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE

4
chỉ cần CHANGE_WIFI_STATE, ít nhất là trong Android 4.2
voghDev

1
UPDATE_DEVICE_STATS chỉ dành cho ứng dụng hệ thống
marienke

Từ Android Q, bạn không thể bật / tắt trực tiếp
Wi-Fi

12

Một giải pháp hoàn chỉnh:

try {
    WifiManager wifi = (WifiManager) 
        context.getSystemService(Context.WIFI_SERVICE);

    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"SSIDName\"";
    wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED; 

    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

    boolean b=wifi.isWifiEnabled();
    if (b) {
        wifi.setWifiEnabled(false);
        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show();
    } else {
        wifi.setWifiEnabled(true);
        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show();
    }
    //Log.d("WifiPreference", "enableNetwork returned " + b );

} catch (Exception e) {
    e.printStackTrace();
}

Tham khảo: http://amitkumar-android.blogspot.com/p/installation-steps.html


1
Cuộc gọi đặt trình quản lý wifi với cấu hình wifi bị thiếu: wifi.addNetwork (wc);
Lỗi 454

4
Tại sao bạn lại mã hóa SSID và mật khẩu của mình? Không phải là một ý tưởng tốt.
lifeson106

@ lifeon106 Tôi nghĩ nó chỉ nhằm mục đích trình diễn.
Bertram Gilfoyle

4

Để bật tắt Wifi, hãy sử dụng WifiManagerlớp để nhận các dịch vụ hệ thống (thiết bị Android) cho Wifi:

WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE); 

Bây giờ đối tượng wificủa WifiManagerlớp được sử dụng để nhận trạng thái wifi:

if(wifi.isWifiEnabled())
    //Perform Operation
else
    //Other Operation

Và quan trọng nhất, đừng quên cấp quyền sau trong Tệp kê khai Android của bạn:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Để nhận thông tin chi tiết và mã mẫu đầy đủ của dự án bật / tắt Wifi trên Android, hãy truy cập liên kết trang web của tôi .


3

Trong Android Q (Android 10), bạn không thể bật / tắt Wi-Fi theo chương trình nữa. Sử dụng Bảng cài đặt để chuyển đổi kết nối Wi-Fi:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
    startActivityForResult(panelIntent, 0)
} else {
    // use previous solution, add appropriate permissions to AndroidManifest file (see answers above)
    (this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}

1

thêm quyền này vào tệp kê khai của bạn và sử dụng mã trên để thay đổi trạng thái WiFi:

 <!--permission ge enable and disable WIFI in android-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1

Tôi không thể truy cập trực tiếp đối tượng ngữ cảnh.
Giải pháp của tôi như sau:

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
wifiManager.SetWifiEnabled(state);

Ngoài ra tôi đã phải thay đổi một số bài viết, ví dụ. WIFI_SERVICE so với WifiService.


0

Có thể bật / tắt wifi trên các thiết bị Android 10 trước bằng đoạn mã sau:

WifiManager wifiManager = 
(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);

wifiManager.setWifiEnabled (trạng thái);

Nhưng lưu ý rằng không thể làm điều này nữa trên Android 10 và có thể sẽ tiếp tục.
https://issuetracker.google.com/issues/141011684


0

Android 10 (Q) trở đi không thể bật / tắt wifi, bạn cần mở mục đích cài đặt,

// for android Q and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Intent panelIntent = new 
Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
            startActivityForResult(panelIntent, 0);
        } else {
            // for previous android version
            WifiManager wifiManager = (WifiManager) 
this.getApplicationContext().getSystemService(WIFI_SERVICE);
            wifiManager.setWifiEnabled(true);
        }

Trong tệp kê khai,

 <uses-permission
    android:name="android.permission.CHANGE_WIFI_STATE"
    android:required="true" />

0

Phương pháp này hiện không được dùng nữa kể từ bây giờ bắt đầu với Android Q.

Hãy thử Điều này sẽ thực sự hữu ích.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {// if build version is less than Q try the old traditional method
                    if (!wifiManager.isWifiEnabled()) {
                        wifiManager.setWifiEnabled(true);
                        btnOnOff.setText("Wifi ONN");
                    } else {
                        wifiManager.setWifiEnabled(false);
                        btnOnOff.setText("Wifi OFF");
                    }
                } else {// if it is Android Q and above go for the newer way    NOTE: You can also use this code for less than android Q also
                    Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
                    startActivityForResult(panelIntent, 1);
                }

Giá trị trỏ đến phương pháp mới / ưa thích với ví dụ?
dùng1016765

Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu người hỏi làm rõ . - Từ đánh giá
Ryan M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.