Android WIFI的管理方法

作者:李灏

一、什么是wifi

wifi是一种无线联网的技术,以前通过网线链接电脑,现在则是通过无线电波来链接网络。常见的发送无线电波的工具是无线路由器,无线路由器的电波覆盖的有效范围都可以采用wifi方式上网。如果wifi链接了asdl上网线路,则又被称作“热点”。


二、wifi网卡的状态

WIFI网卡的状态是由一系列的整形常量来表示的。

WIFI_STATE_DISABLED  1     WIFI无线网卡不可用

WIFI_STATE_DISABLING 0   WIFI正在关闭

WIFI_STATE_ENABLED   3   WIFI可用

WIFI_STATE_ENABLING  2   WIFI正在打开

WIFI_STATE_UNKNOWN   4   未知网卡状态


三、操作WIFI网卡所需要的权限

关于操作权限可以在帮助文档当中找到完整的列表,在这里列出和网络部分相关的权限。

CHANGE_NETWORK_STATE

CHANGE_WIFI_STATE

ACCESS_NETWORK_STATE

ACCESS_WIFI_STATE

英语字面上的意思已经能够解释了这四个变量的具体含义。


四、修改WIFI网卡的状态

对WIFI网卡进行操作需要通过WIFIManager对象进行,获取该对象的方法如下:

wifiManager =(WifiManager)Context.getSystemService(Service.WIFI_SERVICE);

getSystemService是获取当前环境的系统服务。同理可以用此方法来获取其他系统服务。

打开无线网卡:

            wifiManager.setWifiEnabled(true);

关闭无线网卡:

            wifiManager.setWifiEnabled(false);

获取无线网卡状态:

            wifiManager.getWifiState()


五、示例代码

首先需要在AndroidManifest.xml中添加获取无线网卡状态所需要的权限:


[html] view plaincopy
  1. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>  
  2. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  


此实验需要在真机条件下运行,因为模拟器没有办法模拟出无线网卡。如果在模拟器下启动无线网卡之后,无线网卡的状态会被置为4,也就是未知网卡状态(WIFI_STATE_UNKNOWN)。而且在模拟器下运行的时候还需要加一条权限:


[html] view plaincopy
  1. <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>  

具体原因也不知道为什么,运行代码后android日志里面说需要添加这个权限。

主程序中的代码如下:


[java] view plaincopy
  1. package com.wifi;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.net.wifi.WifiManager;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.   
  11. public class WIFITestActivity extends Activity {  
  12.     /** Called when the activity is first created. */  
  13.     private Button startButton = null;  
  14.     private Button stopButton = null;  
  15.     private Button checkButton = null;  
  16.     private WifiManager wifiManager = null;  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.           
  22.         startButton = (Button)this.findViewById(R.id.startButton);  
  23.         stopButton = (Button)this.findViewById(R.id.stopButton);  
  24.         checkButton = (Button)this.findViewById(R.id.checkButton);  
  25.         startButton.setOnClickListener(new StartListener());  
  26.         stopButton.setOnClickListener(new StopListener());  
  27.         checkButton.setOnClickListener(new CheckListener());  
  28.     }  
  29.     class StartListener implements OnClickListener{  
  30.   
  31.         @Override  
  32.         public void onClick(View v) {  
  33.             // TODO Auto-generated method stub  
  34.             wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);  
  35.             wifiManager.setWifiEnabled(true);  
  36.             System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());  
  37.         }         
  38.     }  
  39.     class StopListener implements OnClickListener{  
  40.   
  41.         @Override  
  42.         public void onClick(View v) {  
  43.             // TODO Auto-generated method stub  
  44.             wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);  
  45.             wifiManager.setWifiEnabled(false);  
  46.             System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());  
  47.         }         
  48.     }  
  49.     class CheckListener implements OnClickListener{  
  50.   
  51.         @Override  
  52.         public void onClick(View v) {  
  53.             // TODO Auto-generated method stub  
  54.             wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);  
  55.             System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());  
  56.         }         
  57.     }  
  58.              
  59. }  


六、运行结果及总结


事件            输出状态

按下start       2(WIFI_STATE_ENABLING)

按下check       3(WIFI_STATE_ENABLED)

按下stop        0(WIFI_STATE_DISABLING)

按下check       1(WIFI_STATE_DISABLED)

对无线网络的监管其实还是有挺大用处的。比如一个需要和网络大量交互的程序,在运行之前可以先判断一下无线网卡的状态,然后对用户进行提醒操作。

原文地址:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值