【问题标题】:Android: How to Enable/Disable Wifi or Internet Connection ProgrammaticallyAndroid:如何以编程方式启用/禁用 Wifi 或 Internet 连接
【发布时间】: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 ) {
  // ...
}

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

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

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

【问题讨论】:

  • 您有没有针对移动数据禁用选项的解决方案?

标签: java android kotlin wifi hotspot


【解决方案1】:

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

【讨论】:

  • 也在清单中:&lt;uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&gt;
  • 这与 wifiManager.reconnect() 有区别吗? wifiManager.reassociate() 怎么样?同样在上述方法中,如果您想重置 WiFi,您可以调用 wifiManager.setWifiEnabled(false) 和 wifiManager.setWifiEnabled(true) 背靠背吗?还是您必须先禁用它,然后等待一些信号(广播接收器等)才能再次启用它?
  • 如果您想要演示教程,请点击此处:demoadda.com/demo/android/…
  • “&lt;uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&gt;” 也是需要的。
  • 是否可以通过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" />
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-06-27
              • 2011-03-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-06-25
              相关资源
              最近更新 更多