85

使用 Connectivity Manager 类,我们可以访问 wifi 或 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 ) {
  // ...
}

其中01分别指的是移动和wifi连接

如果我的 Android 设备同时连接到两者,我们可以在任何网络之间切换还是可以禁用任何网络?就像使用一个函数:

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

10 回答 10

187

我知道启用或禁用 wifi:

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

状态可能是truefalse根据要求。

编辑:

您还需要在清单文件中具有以下权限:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
于 2010-10-14T07:45:34.603 回答
30

要启用 WiFi:

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

要禁用 WiFi:

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

注意:要使用 WiFi 状态访问,我们必须在 AndroidManifest.xml 文件中添加以下权限:

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE
于 2012-09-10T05:07:47.057 回答
13

一个完整的解决方案:

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

参考:http ://amitkumar-android.blogspot.com/p/installation-steps.html

于 2011-01-05T19:57:53.240 回答
7

Android Q (Android 10)中,您不能再以编程方式启用/禁用 wifi。使用设置面板切换 wifi 连接:

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*/ }
}
于 2020-04-18T13:04:33.077 回答
4

要启用禁用 Wifi,请使用WifiManager该类来获取 Wifi 的系统(android 设备)服务:

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

现在该类的对象wifi用于WifiManager获取 wifi 状态:

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

最重要的是不要忘记在您的 Android 清单文件中提供以下权限:

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

要获取在 android 上启用/禁用 Wifi 的项目的详细信息和完整示例代码,请访问我的网站链接

于 2012-06-14T21:04:25.653 回答
2

从现在开始,从 Android Q 开始不推荐使用此方法。

试试这真的很有帮助。

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);
                }
于 2020-06-26T15:28:58.640 回答
1

在您的清单中添加此权限,然后使用上述代码更改 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"/>
于 2012-05-18T07:29:25.543 回答
1

我无法直接访问上下文对象。
我的解决方案如下:

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

我也不得不改变一些着作,例如。WIFI_SERVICE 与 WifiService。

于 2018-05-17T12:30:53.547 回答
1

可以使用以下代码在 Android 10 之前的设备上启用/禁用 wifi :

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

wifiManager.setWifiEnabled(状态);

请注意,在 Android 10 上无法再执行此操作,并且可能还会继续。
https://issuetracker.google.com/issues/141011684

于 2019-09-25T07:40:08.400 回答
1

Android 10 (Q) 及以上 wifi 无法启用/禁用您需要打开设置意图,

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

体现在,

 <uses-permission
    android:name="android.permission.CHANGE_WIFI_STATE"
    android:required="true" />
于 2020-06-05T03:42:39.630 回答