转载时请注明转自:http://blog.csdn.net/sam_zhang1984
交流可加新浪微博:Android开发人
Wifi 的一些官方说明,历史由来就不多说了,这些需要进百度一下大把资料看!
这一集主内容有:
一、 WIFI 网卡有哪些状态?
二、 操作 WIFI 需要获取的权限!
三、 改变 WIFI 的状态!
一、 WIFI 网卡有哪些状态?
WIFI 总共有以下五个状态,实际就是一些整形常量:
1. WIFI_STATE_DISABLED : WIFI 不能使用,其值是: 1 。
2. WIFI_STATE_DISABLING : WIFI 正在关闭中,由于 WIFI 关闭是需要这一个过程,这个状态就表示 WIFI 正在关闭的过程中,其值是: 0 。
3. WIFI_STATE_ENABLED : WIFI 可以使用,其值是: 3 。
4. WIFI_STATE_ENABLING : WIFI 正在开启中,其道理同 WIFI_STATE_DISABLING ,其值是: 2 。
5. WIFI_STATE_UNKNOWN :未知网卡状态,当手机或程序出现了一些错误引起 WIFI 不可用时会是这个状态,其值是: 4 。
二、 操作 WIFI 需要获取的权限
要获取操作 WIFI 的权限,就必须知道 WIFI 到底有哪些权限, WIFI 的主要操作权限有四个:
CHANGE_NETWORK_STATE :允许修改网络状态的权限。
CHANGE_WIFI_STATE :允许修改 WIFI 状态的权限。
ACCESS_NETWORK_STATE :允许访问网络状态的权限。
ACCESS_WIFI_STATE :允许访问 WIFI 状态的权限。
声明操作 WIFI 权限是在 AndroidManifest.xml 文件中进行声明!
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.sam.wifiTest"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".firstWifi"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="4" />
- <!--得到WIFI访问网络所需要的权限 -->
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
- </manifest>
注:所有与权限有关的定义都在 Manifest.permission 这个类里面,可以通过帮助文档进行相关查询。
-----------------------------分割线-----------------------------------
一点半了,要睡一觉才行,下午还要上班,下了班准备去打一下篮球,都三四个月没打过球了,这次连面包牛奶都带好,下班吃饱就去打球,晚上接着写
-----------------------------分割线-----------------------------------
三、 改变 WIFI 的状态
测试程序主要是有三个按钮,并为这三个按钮添加监听器,在监听器里面实现我们本节内容——改变 WIFI 的状态。
由于是第一篇笔记,这里写得详细一点,在这里说明按钮的添加和监听器添加,由于过于基础,可选择跳过这段不看。
按钮添加是在 main.xml 的布局文件中添加以下代码,其中 TextView 是系统自动生成的,可以去掉也可以留着用,下面的 Button 就是我们所添加的三个按钮,按钮的 ID 会自动在 R.java 中添加,按钮的标签即 Text 属于里可以直接写上自己喜欢的标签,也可以在资源文件 stings.xml 中添加,后者更为合理,更便于后续工作! stings.xml 如下所示,布局文件 main.xml 的其它会在其它笔记中专门详细讲到:
- <TextView
- android:id="@+id/textWifi"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/btnBegin"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/btnBeginCaption"
- />
- <Button
- android:id="@+id/btnStop"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/btnStopCaption"
- />
- <Button
- android:id="@+id/btnTest"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/btnTestCaption"
- />
- <string name="btnBeginCaption">打开WIFI</string>
- <string name="btnStopCaption">关闭WIFI</string>
- <string name="btnTestCaption">检测WIFI状态</string>
监听器的添加:
新增一个内部类,实现点击监听器接口 OnClickListener ,然后覆写其 public void onClick(View v) 方法即可,最后把按钮跟这个新增的监听器类绑定,即可捕捉按钮的点击事件。
- //为按钮绑定监听器
- btnBegin.setOnClickListener( new btnBenginListener());
- class btnBenginListener implements OnClickListener{
- public void onClick(View v) {
- // TODO Auto-generated method stub
- texWifi.setText("点了开始按钮");
- m_wifiManager=(WifiManager)firstWifi.this.getSystemService(Context.WIFI_SERVICE);
- m_wifiManager.setWifiEnabled(true);
- //显示状态
- displayWifiState(m_wifiManager.getWifiState()) ;
- }
- }
对 WIFI 状态进行操作主要涉及到三个方面:
1. 得到 WifiManager 对象,这个对象是我们操作 WIFI 网卡的根本,无论是改变 WIFI 的状态,还是获取 WIFI 的状态,都要通过这个对象。
2. 改变 WIFI 网卡状态,涉及到一个 WifiManager 的方法 SetWifiEnabled ,通过这个方法的参数设置,可以实现打开或关闭 WIFI : true 表示打开, false 表示关闭。
3. 获取 WIFI 网卡的状态,涉及到一个 WifiManager 的方法 getWifiState , 通过这个方法,就可以取得 WIFI 的当前状态,即第一点中所讲的 WIFI 五个状态中的一个。
注:
1、 有些地方使用
m_wifiManager =(WifiManager)Context.getSystemService(Service. WIFI_SERVICE ) ; 来取得 WifiManager 对象,但从上面代码中我们可以看到,我们使用的是:
m_wifiManager =(WifiManager)firstWifi.this .getSystemService(Context. WIFI_SERVICE );
即通过我们自己的 Activity 来获取。这是因为 Activity 是 Context 的一个子类,所以可以这样。里面之所以用到 firstWifi. this 关键字,而不是直接使用 this 关键字,是因为我们是在一个监听器里面实现,这个监听器是一个内部类,如果只用 this 则是指这个监听器本身,而我们要用到的是我们自己定义的 Activity ,故有此做法。
2、 至于 Service.WIFI_SERVICE ,由于 Service 也是 Context 的一个子类, Service 的 WIFI_SERVICE 实际是从 Context 那里继承下来的,所以写成 Context.WIFI_SERVICE 也是没有问题的。
四、 实践程序界面
五、 总结
1. 要对 WIFI 进行操作,首先要获取 WIFI 操作权限, WIFI 操作权限主要有四个: CHANGE_NETWORK_STATE 、 CHANGE_WIFI_STATE 、 ACCESS_NETWORK_STATE 、 ACCESS_WIFI_STATE 。
2. 然后得到 WifiManager 对象,就可以通过 WifiManager 对象进行 WIFI 网卡操作和网卡状态获取了。