Mars Android视频学习笔记——01_23_WIFI网络操作

来源:互联网 发布:linux 定时任务 编辑:程序博客网 时间:2024/05/21 16:59

转载时请注明转自: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文件中进行声明!

[xhtml] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.sam.wifiTest"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".firstWifi"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.     </application>  
  15.     <uses-sdk android:minSdkVersion="4" />  
  16.     <!--得到WIFI访问网络所需要的权限 -->  
  17.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>  
  18.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  19.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
  20.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  21. </manifest>   

注:所有与权限有关的定义都在Manifest.permission 这个类里面,可以通过帮助文档进行相关查询。

-----------------------------分割线-----------------------------------

 

         一点半了,要睡一觉才行,下午还要上班,下了班准备去打一下篮球,都三四个月没打过球了,这次连面包牛奶都带好,下班吃饱就去打球,晚上接着写

    -----------------------------分割线-----------------------------------

三、         改变 WIFI的状态

测试程序主要是有三个按钮,并为这三个按钮添加监听器,在监听器里面实现我们本节内容——改变WIFI 的状态。

由于是第一篇笔记,这里写得详细一点,在这里说明按钮的添加和监听器添加,由于过于基础,可选择跳过这段不看。

按钮添加是在main.xml 的布局文件中添加以下代码,其中 TextView 是系统自动生成的,可以去掉也可以留着用,下面的 Button就是我们所添加的三个按钮,按钮的 ID 会自动在 R.java 中添加,按钮的标签即 Text 属于里可以直接写上自己喜欢的标签,也可以在资源文件stings.xml 中添加,后者更为合理,更便于后续工作! stings.xml如下所示,布局文件 main.xml 的其它会在其它笔记中专门详细讲到:

 

[xhtml] view plaincopyprint?
  1. <TextView    
  2.     android:id="@+id/textWifi"  
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="wrap_content"   
  5.     android:text="@string/hello"  
  6.     />  
  7.  <Button  
  8.     android:id="@+id/btnBegin"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="@string/btnBeginCaption"  
  12.  />  
  13.  <Button  
  14.     android:id="@+id/btnStop"  
  15.     android:layout_width="fill_parent"   
  16.     android:layout_height="wrap_content"   
  17.     android:text="@string/btnStopCaption"  
  18.  />  
  19.  <Button  
  20.     android:id="@+id/btnTest"  
  21.     android:layout_width="fill_parent"   
  22.     android:layout_height="wrap_content"   
  23.     android:text="@string/btnTestCaption"  
  24.  />  
  

[xhtml] view plaincopyprint?
  1. <string name="btnBeginCaption">打开WIFI</string>  
  2.     <string name="btnStopCaption">关闭WIFI</string>  
  3.     <string name="btnTestCaption">检测WIFI状态</string>  

监听器的添加:

新增一个内部类,实现点击监听器接口OnClickListener ,然后覆写其 public void onClick(View v)方法即可,最后把按钮跟这个新增的监听器类绑定,即可捕捉按钮的点击事件。

[java] view plaincopyprint?
  1. //为按钮绑定监听器   
  2. btnBegin.setOnClickListener( new btnBenginListener());  
  3. class btnBenginListener implements OnClickListener{  
  4.         public void onClick(View v) {  
  5.             // TODO Auto-generated method stub  
  6.             texWifi.setText("点了开始按钮");  
  7.             m_wifiManager=(WifiManager)firstWifi.this.getSystemService(Context.WIFI_SERVICE);  
  8.             m_wifiManager.setWifiEnabled(true);  
  9.             //显示状态   
  10.             displayWifiState(m_wifiManager.getWifiState()) ;  
  11.         }  
  12.     }  

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_STATECHANGE_WIFI_STATEACCESS_NETWORK_STATEACCESS_WIFI_STATE

2.       然后得到 WifiManager 对象,就可以通过 WifiManager 对象进行 WIFI网卡操作和网卡状态获取了。

0 0
原创粉丝点击