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

Jav*_*tor 79 android

使用Connectivity Manager Class,我们可以访问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 ) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

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

如果我的Android设备连接到两者,我们可以在任何网络之间切换,还是可以禁用任何网络?喜欢使用功能:

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);
Run Code Online (Sandbox Code Playgroud)

viv*_*viv 179

我知道启用或禁用wifi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
Run Code Online (Sandbox Code Playgroud)

状态可能是truefalse根据要求.

编辑:

您还需要清单文件中的以下权限:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
Run Code Online (Sandbox Code Playgroud)

  • 同样在清单:`<uses-permission android:name ="android.permission.CHANGE_WIFI_STATE"/>` (47认同)
  • 嗨!是否有相同的方式来启用移动网络? (2认同)
  • 这与wifiManager.reconnect()不同吗?那么wifiManager.reassociate()呢?另外在上面的方法中,如果你想重置WiFi,你可以调用wifiManager.setWifiEnabled(false)和wifiManager.setWifiEnabled(true)背靠背吗?或者你必须先禁用它,然后等待一些信号(广播接收器等)再启用它之前? (2认同)

小智 29

启用WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(true);
Run Code Online (Sandbox Code Playgroud)

要禁用WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false);
Run Code Online (Sandbox Code Playgroud)

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

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE
Run Code Online (Sandbox Code Playgroud)

  • 只有CHANGE_WIFI_STATE是必要的,至少在Android 4.2中是这样 (4认同)
  • UPDATE_DEVICE_STATS 仅适用于系统应用程序 (2认同)
  • 从Android Q开始,你不能直接打开/关闭wifi (2认同)

小智 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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么要对您的SSID和密码进行硬编码?不是个好主意. (4认同)

Ser*_*gey 5

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*/ }
}
Run Code Online (Sandbox Code Playgroud)