2021-05-25 Android 有关WIFI的命令以及解决wifi异常的办法

本文介绍了如何使用ADB命令和wpa_cli管理Android设备的WiFi,包括关闭、打开WiFi,查看连接状态,扫描热点,添加、连接和断开热点,以及检查WiFi是否正常工作的方法。此外,还提供了一段用于检测WiFi状态的代码,当检测到异常时,会尝试重新加载WiFi模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            Android 有关WIFI的命令以及解决wifi异常的办法

一、关闭wifi命令  adb shell svc wifi disable

二、打开wifi命令 adb shell svc wifi enable

三、查看wifi连接状态

xxx:/ # ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr bc:9d:42:08:07:96
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1578 TX bytes:2798

xxx:/ # ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr bc:9d:42:08:07:96
          inet addr:172.20.10.3  Bcast:172.20.10.15  Mask:255.255.255.240
          inet6 addr: fe80::be9d:42ff:fe08:796/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3206 TX bytes:5230

三、扫描热点

       wpa_cli -i wlan0 scan
       wpa_cli -i wlan0 scan_results

四、添加热点

       wpa_cli -i wlan0 add_network  0
       wpa_cli -i wlan0 set_network   0  ssid "fuckyouwifi"
       wpa_cli -i wlan0 set_network   0  psk "8582665"
       wpa_cli -i wlan0 save_config

       wpa_cli -i wlan0 add_network  1
       wpa_cli -i wlan0 set_network   1  ssid "shitwifi"
       wpa_cli -i wlan0 set_network    1  psk  "8952555"
       wpa_cli -i wlan0 save_config

五、连接wifi
       wpa_cli -i wlan0 list_network                     //列出可用wifi
       wpa_cli -i wlan0 select_network  0            //选择第0个热点
       wpa_cli -i wlan0 enable_network 0           //使能第0个热点
       dhcptool wlan0                                         //启用动态地址分配

       ifconfig wlan0 up  //打开wifi ,自动连接到已经连接的wifi设备,在px30 buildroot上测试ok

六、断开wifi
       ifconfig wlan0 down
       killall wpa_supplicant   

       wpa_cli -i wlan0 disconnect //断开连接,但是是用ifconfig还是可以看到wlan0设备

        与 disconnect 命令相反的命令是 reconnectreassociate

七、删除已保存热点
       wpa_cli -i wlan0 list_network
       wpa_cli -i wlan0 remove_network 0       //删除第0个热点
       wpa_cli -i wlan0  save_config

八、实际应用,检测wifi是否正常工作,如果wifi连接有异常就重新安装wifi module

int system_returnval(const char * cmd, char *pRetMsg, int msg_len)
{
	FILE * fp;
	char * p = NULL;
	int ret = -1;
	if (cmd == NULL || pRetMsg == NULL || msg_len < 0)
	{
		printf("Param Error!\n");
		return -1;
	}
	if ((fp = popen(cmd, "r") ) == NULL)
	{
		printf("Popen Error!\n");
		return -2;
	}
	else
	{
		memset(pRetMsg, 0, msg_len);
		while(fgets(pRetMsg, msg_len, fp) != NULL)
		{
			printf("Msg:%s",pRetMsg); //print all info
			
			if (strstr(pRetMsg, "BROADCAST MULTICAST") != NULL)
				ret = 0;
			
			if (strstr(pRetMsg, "UP BROADCAST MULTICAST") != NULL)
		        ret = 1;
			
			if (strstr(pRetMsg, "UP BROADCAST RUNNING MULTICAST") != NULL)
			{
				ret = 2;
			}
		}
			
		if ( pclose(fp) == -1)
		{
			printf("close popenerror!\n");
			return -3;
		}
		//pRetMsg[strlen(pRetMsg)-1] = '\0';
		pRetMsg[strlen(pRetMsg)] = '\0';
		return ret;
	}
}

int scan_wifi_results(const char * cmd)
{
	FILE * fp;
	char * p = NULL;
	int ret = -1,number=0;
	char pRetMsg[800] = {0};

	if ((fp = popen(cmd, "r") ) == NULL)
	{
		printf("Popen Error!\n");
		return -2;
	}
	else
	{
		memset(pRetMsg, 0, 800);
		while(fgets(pRetMsg, 800, fp) != NULL)
		{
			number++;
			ALOGI("[%d]:%s",number,pRetMsg); //print all info
			
		}
			
		if ( pclose(fp) == -1)
		{
			printf("close popenerror!\n");
			return -3;
		}

		return number;
	}
}
if(loop_number%6 == 0)
		{
			ALOGD("*************begin to detect wifi status*************");
			memset(temp_data, 0, strlen(temp_data));
			ret  = system_returnval(IFCONFIGWLAN0, temp_data, sizeof(temp_data));
			switch(ret)
			{
				 case 0:
						ALOGD("WFII STATUS : BROADCAST MULTICAST");
						connected = 0;
				 break;
				 
				 case 1:
						ALOGD("WFII STATUS : UP BROADCAST MULTICAST,connected=%d   reset_time=%d  ",connected,reset_time / 2);
						if((connected == 2 )&&(( reset_time / 2) > SET_RESET_TIME))
						{
						  wifi_number = scan_wifi_results("wpa_cli -iwlan0 scan_results");
						  if( wifi_number < 2 )
						  {
								ALOGD("remove 8821cu ko");
								system("rmmod 8821cu");
								usleep(2500000);
								ALOGD("insmod /system/lib/modules/8821cu.ko");
								system("insmod /system/lib/modules/8821cu.ko");
								reset_time= 0;
								connected =1;
						  }else
						  {
							    connected =1;
								ALOGD("wifi_number=%d,wifi is working ok, no need to reset!",wifi_number);  
								
						  }
						}
				 break;
				 
				 case 2:
						ALOGD("WFII STATUS : UP BROADCAST RUNNING MULTICAST");
						reset_time= 0;
						connected = 2;
				 break;	
				 
				 default :
				        connected = 0;
						ALOGD("WFII STATUS : UNKNOW");
				 break;
			}
			ALOGD("*************detect wifi status end*************ret=%d,reset_time=%d ",ret,reset_time / 2);
		}

九、参考文章

       https://www.jb51.net/article/180683.htm

       安卓adb命令启动wifi方法_cool黑科技的博客-CSDN博客_adb 打开wifi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值