WIFI是无线通信协议,可以允许手机直接连接到无线网络。在现在3G资费还比较贵的情况下,WIFI对于手机来说是很重要的,我们可以很方便的下载软件,音乐等资源。Android手机必须要有WIFI网卡才能支持WIFI。Android应用程序有时候需要对WIFI网卡进行操作,从而操作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网卡一定的权限。
WIFI 的主要操作权限有四个:
CHANGE_NETWORK_STATE :允许修改网络状态的权限。
CHANGE_WIFI_STATE :允许修改 WIFI 状态的权限。
ACCESS_NETWORK_STATE :允许访问网络状态的权限。
ACCESS_WIFI_STATE :允许访问 WIFI 状态的权限。
在AndroidManifest.xml文件中添加权限。
<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>
改变WIFI网卡的状态
对WIFI网卡进行操作需要通过WifiManager对象来进行,获取该对象的方法如下:
WifiManager wifiManger=WifiManger)Context.getSystemServiceService.WIFI-SERVICE);
打开WIFI网卡
wifiManager.setWifiEnabledtrue);
关闭WIFI网卡
wifiManager.setWifiEnabledfalse);
获取网卡当前的状态
wifiManager.getWifiState);
示例:新建一个一个Android应用程序,在main.xml中添加三个按钮,点击这三个按钮分别可以打开WIFI网卡,关闭WIFI网卡,检查网卡 的当前状态。需要说明的是由于Android模拟器不支持WIFI和蓝牙所以程序执行时返回的网卡状态都是WIFI_STATE_UNKNOWN:网卡未知的状态。此程序需要在真机上进行调试才会显示正确的运行结果。这里主要是为了说明程序如何编写。
[html] view plaincopyprint? 1. <?xml version=“1.0” encoding=“utf-8”?> 2. <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android” 3. android:orientation=“vertical” 4. android:layout_width=“fill_parent” 5. android:layout_height=“fill_parent” 6. > 7. <TextView 8. android:layout_width=“fill_parent” 9. android:layout_height=“wrap_content” 10. android:text=“@string/hello” 11. /> 12. <Button 13. android:id=“@+id/startButton” 14. android:layout_width=“300dp” 15. android:layout_height=“wrap_content” 16. android:text=“打开WIFI网卡” 17. /> 18. <Button 19. android:id=“@+id/stopButton” 20. android:layout_width=“300dp” 21. android:layout_height=“wrap_content” 22. android:text=“关闭WIFI网卡” 23. /> 24. <Button 25. android:id=“@+id/checkButton” 26. android:layout_width=“300dp” 27. android:layout_height=“wrap_content” 28. android:text=“检查WIFI网卡状态” 29. /> 30. </LinearLayout>
1. <?xml version="1.0" encoding="utf-8"?> 2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3. android:orientation="vertical" 4. android:layout_width="fill_parent" 5. android:layout_height="fill_parent" 6. > 7. <TextView 8. android:layout_width="fill_parent" 9. android:layout_height="wrap_content" 10. android:text="@string/hello" 11. /> 12. <Button 13. android:id="@+id/startButton" 14. android:layout_width="300dp" 15. android:layout_height="wrap_content" 16. android:text="打开WIFI网卡" 17. /> 18. <Button 19. android:id="@+id/stopButton" 20. android:layout_width="300dp" 21. android:layout_height="wrap_content" 22. android:text="关闭WIFI网卡" 23. /> 24. <Button 25. android:id="@+id/checkButton" 26. android:layout_width="300dp" 27. android:layout_height="wrap_content" 28. android:text="检查WIFI网卡状态" 29. /> 30. </LinearLayout>
[java] view plaincopyprint? 1. package idea.org; 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. import android.widget.Toast; 11. 12. public class Android_Wifi extends Activity { 13. private Button startButton=null; 14. private Button stopButton=null; 15. private Button checkButton=null; 16. WifiManager wifiManager=null; 17. /** Called when the activity is first created. */ 18. @Override 19. public void onCreateBundle savedInstanceState) { 20. super.onCreatesavedInstanceState); 21. setContentViewR.layout.main); 22. startButton=Button)findViewByIdR.id.startButton); 23. stopButton=Button)findViewByIdR.id.stopButton); 24. checkButton=Button)findViewByIdR.id.checkButton); 25. startButton.setOnClickListenernew startButtonListener)); 26. stopButton.setOnClickListenernew stopButtonListener)); 27. checkButton.setOnClickListenernew checkButtonListener)); 28. } 29. class startButtonListener implements OnClickListener 30. { 31. 32. /* non-Javadoc) 33. * @see android.view.View.OnClickListener#onClickandroid.view.View) 34. */ 35. @Override 36. public void onClickView v) { 37. // TODO Auto-generated method stub 38. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 39. wifiManager.setWifiEnabledtrue); 40. System.out.println“wifi state —>”+wifiManager.getWifiState)); 41. Toast.makeTextAndroid_Wifi.this, “当前网卡状态为:”+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 42. } 43. 44. } 45. class stopButtonListener implements OnClickListener 46. { 47. 48. /* non-Javadoc) 49. * @see android.view.View.OnClickListener#onClickandroid.view.View) 50. */ 51. @Override 52. public void onClickView v) { 53. // TODO Auto-generated method stub 54. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 55. wifiManager.setWifiEnabledfalse); 56. System.out.println“wifi state —>”+wifiManager.getWifiState)); 57. Toast.makeTextAndroid_Wifi.this, “当前网卡状态为:”+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 58. } 59. 60. } 61. class checkButtonListener implements OnClickListener 62. { 63. 64. /* non-Javadoc) 65. * @see android.view.View.OnClickListener#onClickandroid.view.View) 66. */ 67. @Override 68. public void onClickView v) { 69. // TODO Auto-generated method stub 70. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 71. System.out.println“wifi state —>”+wifiManager.getWifiState)); 72. Toast.makeTextAndroid_Wifi.this, “当前网卡状态为:”+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 73. } 74. } 75. }
1. package idea.org; 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. import android.widget.Toast; 11. 12. public class Android_Wifi extends Activity { 13. private Button startButton=null; 14. private Button stopButton=null; 15. private Button checkButton=null; 16. WifiManager wifiManager=null; 17. /** Called when the activity is first created. */ 18. @Override 19. public void onCreateBundle savedInstanceState) { 20. super.onCreatesavedInstanceState); 21. setContentViewR.layout.main); 22. startButton=Button)findViewByIdR.id.startButton); 23. stopButton=Button)findViewByIdR.id.stopButton); 24. checkButton=Button)findViewByIdR.id.checkButton); 25. startButton.setOnClickListenernew startButtonListener)); 26. stopButton.setOnClickListenernew stopButtonListener)); 27. checkButton.setOnClickListenernew checkButtonListener)); 28. } 29. class startButtonListener implements OnClickListener 30. { 31. 32. /* non-Javadoc) 33. * @see android.view.View.OnClickListener#onClickandroid.view.View) 34. */ 35. @Override 36. public void onClickView v) { 37. // TODO Auto-generated method stub 38. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 39. wifiManager.setWifiEnabledtrue); 40. System.out.println"wifi state --->"+wifiManager.getWifiState)); 41. Toast.makeTextAndroid_Wifi.this, "当前网卡状态为:"+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 42. } 43. 44. } 45. class stopButtonListener implements OnClickListener 46. { 47. 48. /* non-Javadoc) 49. * @see android.view.View.OnClickListener#onClickandroid.view.View) 50. */ 51. @Override 52. public void onClickView v) { 53. // TODO Auto-generated method stub 54. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 55. wifiManager.setWifiEnabledfalse); 56. System.out.println"wifi state --->"+wifiManager.getWifiState)); 57. Toast.makeTextAndroid_Wifi.this, "当前网卡状态为:"+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 58. } 59. 60. } 61. class checkButtonListener implements OnClickListener 62. { 63. 64. /* non-Javadoc) 65. * @see android.view.View.OnClickListener#onClickandroid.view.View) 66. */ 67. @Override 68. public void onClickView v) { 69. // TODO Auto-generated method stub 70. wifiManager=WifiManager)Android_Wifi.this.getSystemServiceContext.WIFI_SERVICE); 71. System.out.println"wifi state --->"+wifiManager.getWifiState)); 72. Toast.makeTextAndroid_Wifi.this, "当前网卡状态为:"+wifiManager.getWifiState), Toast.LENGTH_SHORT).show); 73. } 74. } 75. }
[html] view plaincopyprint? 1. <?xml version=“1.0” encoding=“utf-8”?> 2. <manifest xmlns:android=“http://schemas.android.com/apk/res/android” 3. package=“idea.org” 4. android:versionCode=“1” 5. android:versionName=“1.0”> 6. <uses-sdk android:minSdkVersion=“11” /> 7. 8. <application android:icon=“@drawable/icon” android:label=“@string/app_name”> 9. <activity android:name=“.Android_Wifi” 10. android:label=“@string/app_name”> 11. <intent-filter> 12. <action android:name=“android.intent.action.MAIN” /> 13. <category android:name=“android.intent.category.LAUNCHER” /> 14. </intent-filter> 15. </activity> 16. 17. </application> 18. <uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE”/> 19. <uses-permission android:name=“android.permission.CHANGE_WIFI_STATE”/> 20. <uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/> 21. <uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/> 22. </manifest>
1. <?xml version="1.0" encoding="utf-8"?> 2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3. package="idea.org" 4. android:versionCode="1" 5. android:versionName="1.0"> 6. <uses-sdk android:minSdkVersion="11" /> 7. 8. <application android:icon="@drawable/icon" android:label="@string/app_name"> 9. <activity android:name=".Android_Wifi" 10. android:label="@string/app_name"> 11. <intent-filter> 12. <action android:name="android.intent.action.MAIN" /> 13. <category android:name="android.intent.category.LAUNCHER" /> 14. </intent-filter> 15. </activity> 16. 17. </application> 18. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 19. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 20. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 21. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 22. </manifest>
依次点击“打开WIFI网卡”,“关闭WIFI网卡”,“检查WIFI网卡状态”三个Button按钮,控制台输出一下内容。