安卓enableNetwork连接不上指定wifi或连接wifi后断开,连接到其他wifi的原因和解决方法

原文地址:http://blog.csdn.net/pxshl/article/details/76035294

原因:enableNetwork会断开的当前连接的wifi,再连接指定wifi,而此时系统检测到wifi断开,也会自动连接wifi(默认为最后连接成功的那个wifi),因此可能导致调用enableNetwork却无法连接到指定wifi,或者连接成功后又被断开。


解决方法:

 修改wifi优先级是无效的,原因略。

有2种解决方法,第一种用反射得到WifiManager的connect方法去连接wifi,这个方法能保证比系统更快连接上wifi且刷新优先级。

缺点是,该connect方法在不同sdk上参数是不一样的,因此代码复杂且容易错。


第二种,相当简单,在调用enableNetwork前把所有wifi都disenableNetwork(该方法能阻碍系统重新连接wifi),如

  for (WifiConfiguration wifiConfiguration:mWifiConfigList){
                                    if(!(wifiConfiguration.SSID.equals(TaskConfig.getSsid() )
                                            || wifiConfiguration.SSID.equals("\"" + TaskConfig.getSsid() +  "\""))) {


                                        wifiManager.disableNetwork(wifiConfiguration.networkId);
                                    }

                                }


  mWifiManager.enableNetwork(configuration.networkId, true);

备注:TaskConfig.getSsid()为要连接的WiFi,不用把它也disenableNetwork

 

小弟第一篇文章,如果觉得对您有帮助,请给个评论让我开心开心。。。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wifi的操作。 要实现这个Android wifi开发程序,我们需要使用以下几个类: 1. WifiManager:用于管理wifi连接。 2. WifiInfo:用于获取当前连接wifi信息。 3. WifiConfiguration:用于设置wifi连接的配置参数。 4. WifiScan:用于扫描周围的wifi。 下面是一个示例代码,展示如何使用这些类来实现wifi的扫描、连接断开操作: ``` public class MainActivity extends AppCompatActivity { private WifiManager wifiManager; private WifiScanReceiver wifiScanReceiver; private List<ScanResult> wifiList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiScanReceiver = new WifiScanReceiver(); registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); if(wifiManager.isWifiEnabled()){ wifiManager.startScan(); Log.d("WIFI", "Started Scanning"); }else{ Toast.makeText(getApplicationContext(), "WiFi is disabled.. Please enable it", Toast.LENGTH_LONG).show(); wifiManager.setWifiEnabled(true); } } public void connectToWifi(String ssid, String password){ WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = String.format("\"%s\"", ssid); wifiConfig.preSharedKey = String.format("\"%s\"", password); WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); int networkId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); } public void disconnectFromWifi(){ WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiManager.disconnect(); } private class WifiScanReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { wifiList = wifiManager.getScanResults(); Log.d("WIFI", "Scan Result: " + wifiList.toString()); } } } ``` 在这个示例代码中,我们首先获取了WIFI_SERVICE实例,然后注册了一个WifiScanReceiver来接收wifi扫描的结果。 在onCreate()方法中,我们首先检查wifi是否已经启用。如果已经启用,则调用wifiManager.startScan()方法来启动扫描,并在Logcat中输出“Started Scanning”的消息。 如果wifi未启用,则我们会弹出一条Toast消息来提示用户启用wifi,然后调用wifiManager.setWifiEnabled(true)方法来启用wifi。 接下来,我们定义了connectToWifi()方法和disconnectFromWifi()方法来分别连接断开wifi。 在connectToWifi()方法中,我们首先创建了一个WifiConfiguration对象,并设置其SSID和preSharedKey属性为连接wifi名称和密码。然后,我们调用wifiManager.addNetwork(wifiConfig)方法来添加一个新的wifi连接配置,并获取新添加的连接networkId。接着,我们调用wifiManager.disconnect()方法断开当前连接wifi,并调用wifiManager.enableNetwork(networkId, true)方法来激活新添加的连接配置。最后,我们调用wifiManager.reconnect()方法连接到新添加的wifi网络。 在disconnectFromWifi()方法中,我们只需要调用wifiManager.disconnect()方法即可断开当前连接wifi。 最后,我们通过定义一个WifiScanReceiver类来接收wifi扫描的结果,并在Logcat中输出扫描结果。当扫描结果更新时,系统会自动调用WifiScanReceiver的onReceive()方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值