【问题标题】:Android - Cant Remove Wifi Network Programatically- The method removeNetwork(int) in the type WifiManager is not applicable for the arguments (String)Android - 无法以编程方式删除 Wifi 网络 - WifiManager 类型中的方法 removeNetwork(int) 不适用于参数(字符串)
【发布时间】:2013-04-17 01:54:12
【问题描述】:

我正在尝试以编程方式删除我的 wifi 网络 - 但是我似乎无法让它删除/忘记当前连接的 wifi 连接。这应该是一个非常简单的任务 - 所以我不确定我到底做错了什么。

我以下面的 StackOverflow 帖子为例:

How to forget a wireless network in android programmatically?

     public class KillTimer extends Activity {

     @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.killtimer);
       WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
       wifiManager.getConnectionInfo().getSSID()
       wifiManager.getConnectionInfo().getNetoworkId();
       wifiManager.removeNetwork(wifiConfig.networkId);
       wifiManager.saveConfiguration();

   }}

【问题讨论】:

    标签: java android timer wifi


    【解决方案1】:

    removeNetwork() 只接受整数参数。 networkSSID 是一个字符串值。这就是错误的原因。我看到您使用的是字符串 SSID。您必须提供整数的网络 ID。您可以尝试getConnectionInfo().getSSID() 并与您的ssid 进行比较,如果它们相同,那么您可以尝试获取getConnectionInfo().getNetoworkId(),它应该给出连接网络的网络ID,您可以使用它来删除网络。

    试试这个:

    public class KillTimer extends Activity {
           @Override
           public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.killtimer);
               WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
               int networkId = wifiManager.getConnectionInfo().getNetworkId();
               wifiManager.removeNetwork(networkId);
               wifiManager.saveConfiguration();
           }}
    

    截至 2019 年 6 月 10 日的最新更新

    从 Android 6.0 开始,Wifi Manager 有一些变化。

    如果 WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN 不为零,则用户无法再修改或删除活动设备所有者创建的任何 Wi-Fi 配置。

    活动设备所有者有权编辑或删除任何 Wi-Fi 配置,包括那些不是由他们创建的配置。

    更多详情请参考:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html

    【讨论】:

    • 我实际上不需要硬编码要删除的特定 SSID - 我只是想删除当前连接的任何 SSID。我在上面更新了我的源代码(我省略了你提到的创建来比较它们的部分——因为我想简单地断开连接的任何一个)你能看看我当前的实现对你来说是否正确吗?
    • [非常感谢您的帮助!]
    • 大部分内容你都做对了。尝试编辑响应中的代码
    • 您是一位绅士和一位学者...谢谢您,先生! (它的工作原理!)
    【解决方案2】:
    private void RemoveWifiNetworks() {
    
        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    
        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for (WifiConfiguration i : list) {
            //int networkId = wifiManager.getConnectionInfo().getNetworkId();
            wifiManager.removeNetwork(i.networkId);
            wifiManager.saveConfiguration();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2018-12-20
      相关资源
      最近更新 更多