您当前的位置:首页 > 互联网教程

Android WiFi开发,如何自动连接的代码

发布时间:2025-05-15 00:36:44    发布人:远客网络

Android WiFi开发,如何自动连接的代码

一、Android WiFi开发,如何自动连接的代码

1、public class WifiAutoConnectManager{

2、private static final String TAG= WifiAutoConnectManager.class.getSimpleName();

3、//定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况 public enum WifiCipherType{ WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID}

4、//构造函数 public WifiAutoConnectManager(WifiManager wifiManager){ this.wifiManager= wifiManager;}

5、//提供一个外部接口,传入要连接的无线网 public void connect(String ssid, String password, WifiCipherType type){ Thread thread= new Thread(new ConnectRunnable(ssid, password, type)); thread.start();}

6、//查看以前是否也配置过这个网络 private WifiConfiguration isExsits(String SSID){ List<WifiConfiguration> existingConfigs= wifiManager.getConfiguredNetworks(); for(WifiConfiguration existingConfig: existingConfigs){ if(existingConfig.SSID.equals("\""+ SSID+"\"")){ return existingConfig;}} return null;}

7、 private WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type){ WifiConfiguration config= new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID="\""+ SSID+"\"";// nopass if(Type== WifiCipherType.WIFICIPHER_NOPASS){ config.wepKeys[0]=""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex= 0;}// wep if(Type== WifiCipherType.WIFICIPHER_WEP){ if(!TextUtils.isEmpty(Password)){ if(isHexWepKey(Password)){ config.wepKeys[0]= Password;} else{ config.wepKeys[0]="\""+ Password+"\"";}} config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); config.allowedKeyManagement.set(KeyMgmt.NONE); config.wepTxKeyIndex= 0;}// wpa if(Type== WifiCipherType.WIFICIPHER_WPA){ config.preSharedKey="\""+ Password+"\""; config.hiddenSSID= true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);//此处需要修改否则不能自动重联// config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); config.status= WifiConfiguration.Status.ENABLED;} return config;}

8、//打开wifi功能 private boolean openWifi(){ boolean bRet= true; if(!wifiManager.isWifiEnabled()){ bRet= wifiManager.setWifiEnabled(true);} return bRet;}

9、 class ConnectRunnable implements Runnable{ private String ssid;

10、 public ConnectRunnable(String ssid, String password, WifiCipherType type){ this.ssid= ssid; this.password= password; this.type= type;}

11、@Override public void run(){//打开wifi openWifi();//开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi//状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句 while(wifiManager.getWifiState()== WifiManager.WIFI_STATE_ENABLING){ try{//为了避免程序一直while循环,让它睡个100毫秒检测…… Thread.sleep(100);} catch(InterruptedException ie){}}

12、 WifiConfiguration wifiConfig= createWifiInfo(ssid, password, type);// if(wifiConfig== null){ Log.d(TAG,"wifiConfig is null!"); return;}

13、WifiConfiguration tempConfig= isExsits(ssid);

14、 if(tempConfig!= null){ wifiManager.removeNetwork(tempConfig.networkId);}

15、 int netID= wifiManager.addNetwork(wifiConfig); boolean enabled= wifiManager.enableNetwork(netID, true); Log.d(TAG,"enableNetwork status enable="+ enabled); boolean connected= wifiManager.reconnect(); Log.d(TAG,"enableNetwork connected="+ connected);}}

16、 private static boolean isHexWepKey(String wepKey){ final int len= wepKey.length();

17、// WEP-40, WEP-104, and some vendors using 256-bit WEP(WEP-232?) if(len!= 10&& len!= 26&& len!= 58){ return false;}

18、 private static boolean isHex(String key){ for(int i= key.length()- 1; i>= 0; i--){ final char c= key.charAt(i); if(!(c>='0'&& c<='9'|| c>='A'&& c<='F'|| c>='a'&& c<='f')){ return false;}}

二、android如何开发手动连接隐藏的wifi

连接隐藏的无线网络,需要手动输入隐藏的无线网络的SSID名称和密码,输入后就能连接了,具体方法如下:

1、右键点击屏幕右下角网络图标。

3、在网络和共享中心点击管理无线网络。

6、在弹出的对话框中输入SSID,隐藏的WIFI名称搜不到,只能在这手动输入名称。

7、选择安全类型。一般为WPA2-个人。

这样台式机就能用无线网卡连接隐藏的无线网络了。

三、用于Android Studio手机无线Wifi调试的两种解决方案

用于Android Studio手机无线Wifi调试的两种解决方案

第一种方法是使用adbWireless连接

使用adbWireless工具,它可以使手机使用无线而不是USB连接并使用ADB工具

1.手机必须与计算机位于同一局域网中

2.在手机上安装adbWireless并将其打开,它将在其上显示IP地址

3.在Android Studio的终端中执行adb connect 192.168.137.134:5555

八卦:需要配置终端.我们通常在开发时使用adb命令.有了这个工具,我们可以

管理设备或手机的状态.快速更新设备或手机中的代码,例如应用程序或Android系统升级.在设备上运行Shell命令.管理设备或手机上的预定端口.将文件复制或粘贴到

它真的超级好用,可以节省很多东西.如果您不想配置,也可以直接将cmd转到Android\ Sdk\ platform-tools目录并执行cmd命令,这比较麻烦.

第二种方法使用插件式Android Wifi ADB连接

第一个打开的文件->设置->插件

在搜索框中输入adb,找到最后一个WIFI ADB ULTIMATE,最后单击安装以安装并在安装后重新启动Android Studio.

现在插件准备就绪,我们开始连接.首先确保

3.使用数据线连接到计算机(不要错过,只有在第一次将其连接到USB时)

然后单击刚刚出现的小图标,您将看到一个打开的窗口.窗口中有通过USB连接的设备列表.目前,您只需要单击要无线连接的设备后面的连接(绿色三角形按钮)即可.

注意:如果设备只是连接到计算机,则可以单击蓝色的刷新按钮刷新列表

单击后,您可以看到一个远程设备出现在窗口中.并且AS提示下面的连接成功.

这时,WiFi连接成功,我们不需要USB数据线,可以拔下它.

拔下USB后,您可以看到还有另一台设备并且没有断开连接.成功且愉快的调试.

我个人认为第二种方法令人耳目一新,流利性比第一种更好.它不会冻结,也不会导致设备崩溃.强烈推荐.