Android:如何以编程方式启用/禁用 Wifi 或 Internet 连接
Posted
技术标签:
【中文标题】Android:如何以编程方式启用/禁用 Wifi 或 Internet 连接【英文标题】:Android: How to Enable/Disable Wifi or Internet Connection Programmatically 【发布时间】:2011-04-25 06:20:57 【问题描述】:使用连接管理器类,我们可以访问 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 )
// ...
其中0
和1
分别指移动和wifi 连接
如果我的 android 设备同时连接到这两个网络,我们可以在任何网络之间切换还是可以禁用任何网络?就像使用一个函数:
connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);
【问题讨论】:
你有没有解决移动数据禁用选项的方法? 【参考方案1】:我知道启用或禁用 wifi:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
根据要求,状态可能是true
或false
。
编辑:
您的清单文件中还需要以下权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
【讨论】:
也在清单中:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
这与 wifiManager.reconnect() 有区别吗? wifiManager.reassociate() 怎么样?同样在上述方法中,如果您想重置 WiFi,您可以调用 wifiManager.setWifiEnabled(false) 和 wifiManager.setWifiEnabled(true) 背靠背吗?还是您必须先禁用它,然后等待一些信号(广播接收器等)才能再次启用它?
如果您想要演示教程,请点击此处:demoadda.com/demo/android/…
“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”
也是需要的。
是否可以通过Application控制M设备中的WiFi?【参考方案2】:
启用 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
【讨论】:
只有 CHANGE_WIFI_STATE 是必需的,至少在 Android 4.2 中 UPDATE_DEVICE_STATS 仅适用于系统应用 Android Q 无法直接开/关wifi【参考方案3】:一个完整的解决方案:
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
【讨论】:
使用wifi配置设置wifi管理器的调用丢失:wifi.addNetwork(wc); 为什么要硬编码您的 SSID 和密码?不是个好主意。 @lifeson106 我认为这只是为了演示。【参考方案4】:在 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*/
【讨论】:
【参考方案5】:要启用禁用 Wifi,请使用 WifiManager
类获取 Wifi 的系统(Android 设备)服务:
WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE);
现在WifiManager
类的对象wifi
用于获取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 的项目的详细信息和完整示例代码,请访问my website link。
【讨论】:
【参考方案6】:从现在开始,从 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);
【讨论】:
值得用例子指出新的/首选的方法吗?【参考方案7】:在您的清单中添加此权限,然后使用上述代码更改 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"/>
【讨论】:
【参考方案8】:我无法直接访问上下文对象。 我的解决方案如下:
Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
wifiManager.SetWifiEnabled(state);
我还必须更改一些文字,例如。 WIFI_SERVICE 与 WifiService。
【讨论】:
【参考方案9】:可以使用以下代码在 Android 10 之前的设备上启用/禁用 wifi:
WifiManager wifiManager =
(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
但请注意,在 Android 10 上无法再执行此操作,并且可能还会继续。https://issuetracker.google.com/issues/141011684
【讨论】:
【参考方案10】:Android 10 (Q) 以上的wifi无法开启/关闭需要打开设置intent,
// 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" />
【讨论】:
以上是关于Android:如何以编程方式启用/禁用 Wifi 或 Internet 连接的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中以编程方式启用禁用 GPS? [复制]