android 解决部分手机连接热点wifi导致被切换,enablenetwork(netID, true)无效的问题

写之前先简单介绍下发现的问题:

 A手机创建热点"mini",B手机在连接热点之前,连接的SSID叫做"haha",这时使用enablenetwork(netID, true)方法,连接A创建的热点"mini",一般出现的过程就是先断开"haha",连接"mini"热点,这个过程中,大部分的手机会成功连接上"mini",但是部分手机如OPPO R7 Plus就不能连接上"mini",这种型号的手机连接过程是先断开"haha",连接"mini"热点,但是最后连接的还是"haha",这是为什么呢?
    原来,wifiManager.enableNetwork(netID, true);这个方法只是执行 命令让去连接"指定的SSID",就算返回true也不代表最终连接的wifi是指定的wiifi,这是为什么,是因为我们Wifi断开跟某个SSID连接的时候,系统读取了一个优先级连接,判断出一个要连接的SSID,而我们只想连接我们的SSID,这样此时相当于有两个线程同时在进行,一但我们的SSID先连接上,System的连接晚我们一步连接上,就会导致我们刚连接上的SSID,马上就断开了。          参考链接:http://www.bubuko.com/infodetail-1124873.html,受益良多

       期间还遇到一个问题就是连接无密热点wifi的情况下wifiManager.addNetwork(wifiConfig)返回的netid为-1,这种情况下直接做以下处理,所有目前能遇到的问题都在demo里面处理了,遇到相同问题的童鞋可以下载看看

//            config.wepKeys[0] = "";   
              config.hiddenSSID = true;
              config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
//            config.wepTxKeyIndex = 0;

以下奉上解决办法的demo的下载地址

http://download.csdn.net/detail/zs20082012/9718632

Android可以利用WiFi进行通信,包括连接WiFi热点和使用Socket进行通信。下面介绍一下如何实现。 1. 连接WiFi热点 Android提供了一些API来连接WiFi热点。首先需要获取WiFi管理器: ```java WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); ``` 然后可以通过以下方法获取到WiFi列表: ```java List<ScanResult> scanResults = wifiManager.getScanResults(); ``` 根据扫描结果可以选择要连接WiFi热点,然后使用以下方法连接: ```java WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "\"" + ssid + "\""; wifiConfig.preSharedKey = "\"" + password + "\""; int netId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); ``` 其中,`ssid`是WiFi名称,`password`是密码。这里创建了一个WiFi配置对象,并设置了SSID和密码,然后将其添加到WiFi管理器中,并连接到该网络。 2. Socket通信 连接WiFi热点之后,可以使用Socket进行通信。首先需要创建一个Socket对象: ```java Socket socket = new Socket(ipAddress, port); ``` 其中,`ipAddress`是要连接的设备的IP地址,`port`是端口号。然后就可以使用输入输出流进行数据读写了: ```java OutputStream outputStream = socket.getOutputStream(); outputStream.write(data.getBytes()); outputStream.flush(); InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String message = bufferedReader.readLine(); ``` 这里的`data`是要发送的数据,`message`是收到的数据。注意,在使用完Socket之后要关闭它: ```java socket.close(); ``` 以上就是Android利用WiFi进行通信的基本方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值