Android:如何以编程方式启用/禁用Wifi或Internet连接


82

使用连接管理器类,我们可以访问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);

您是否有针对移动数据禁用选项的解决方案?
Parthi

Answers:


183

我知道启用或禁用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"/> 

47
同样在清单中:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover

2
这与wifiManager.reconnect()有区别吗?wifiManager.reassociate()呢?同样在上述方法中,如果您想重置WiFi,可以背对背调用wifiManager.setWifiEnabled(false)和wifiManager.setWifiEnabled(true)吗?还是您必须先禁用它,然后等待一些信号(广播接收器等),然后才能再次启用它?
李英健

如果您想演示教程FOT那么它的位置:demoadda.com/demo/android/...
基尚Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”也需要。
zionpi '16

是否可以通过应用程序控制M设备中的WiFi?
Nithinjith

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

4
仅CHANGE_WIFI_STATE是必需的,至少在Android 4.2中
voghDev 2014年

1
UPDATE_DEVICE_STATS仅适用于系统应用程序
marienke

从Android Q上,您无法直接打开/关闭wifi
Ravindra Kushwaha

12

完整的解决方案:

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


1
缺少使用wifi配置设置wifi管理器的调用:wifi.addNetwork(wc);
错误454

4
您为什么要对您的SSID和密码进行硬编码?这不是一个好主意。
lifeson106 2014年

@ lifeson106我认为这仅是为了演示。
Bertram Gilfoyle,

4

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

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

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

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的项目的详细信息和完整示例代码,请访问我的网站链接


3

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*/ }
}

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

1

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

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

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


0

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

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

wifiManager.setWifiEnabled(状态);

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


0

无法启用/禁用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" />

0

从现在开始,从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);
                }

值得指出带有示例的新方法/首选方法吗?
user1016765

这不能为问题提供答案。一旦您拥有足够的声誉,您就可以在任何帖子中发表评论;相反,请提供不需要问询者澄清的答案。-来自评论
Ryan M
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.