Android WIFI

WIFI的全称是Wireless Fidelity,又称802.11b标准,是一种高速的无线通信协议,传输速度可以达到11Mb/s。实际上,对WIFI并不需要过多的控制(当成功连接WIFI后,就可以直接通过IP在WIFI设备之间进行通信了),一般只需要控制打开或关闭WIFI以及获得一些与WIFI相关的信息(例如,MAC地址、IP等)。如果读者的Android手机有WIFI功能,可以在手机上测试本节的例子。要注意的是,WIFI功能不能在Android模拟器上测试,就算在有WIFI功能的真机上也需要先通过WIFI和计算机或其他WIFI设备连接后,才能获得与WIFI相关的信息。

       本节的例子可以关闭和开始WIFI,并获得各种与WIFI相关的信息。首先确认手机通过WIFI与其他WIFI设备成功连接,然后运行本节的例子,会看到如图所示的输出信息。

效果图:

4.jpg

 


       本例的完整实现代码如下:

  1. package eoe.demo.wifi; 
  2. import java.net.Inet4Address; 
  3. import java.util.List; 
  4. import android.app.Activity; 
  5. import android.content.Context; 
  6. import android.net.wifi.WifiConfiguration; 
  7. import android.net.wifi.WifiInfo;
  8. import android.net.wifi.WifiManager; 
  9. import android.os.Bundle; 
  10. import android.widget.CheckBox; 
  11. import android.widget.CompoundButton; 
  12. import android.widget.TextView; 
  13. import android.widget.CompoundButton.OnCheckedChangeListener; 
  14. public class Main extends Activity implements OnCheckedChangeListener { 
  15. private WifiManager wifiManager; 
  16. private WifiInfo wifiInfo; 
  17. private CheckBox chkOpenCloseWifiBox; 
  18. private List<WifiConfiguration> wifiConfigurations; 
  19. @Override 
  20. public void onCreate(Bundle savedInstanceState) { 
  21. super.onCreate(savedInstanceState); 
  22. setContentView(R.layout.main); 
  23. // 获得WifiManager对象 
  24. wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
  25. // 获得连接信息对象 
  26. wifiInfo = wifiManager.getConnectionInfo(); 
  27. chkOpenCloseWifiBox = (CheckBox) findViewById(R.id.chkOpenCloseWifi); 
  28. TextView tvWifiConfigurations = (TextView) findViewById(R.id.tvWifiConfigurations); 
  29. TextView tvWifiInfo = (TextView) findViewById(R.id.tvWifiInfo); chkOpenCloseWifiBox.setOnCheckedChangeListener(this); 
  30. // 根据当前WIFI的状态(是否被打开)设置复选框的选中状态 
  31. if (wifiManager.isWifiEnabled()) { 
  32. chkOpenCloseWifiBox.setText("Wifi已开启"); 
  33. chkOpenCloseWifiBox.setChecked(true); 
  34. } else { 
  35. chkOpenCloseWifiBox.setText("Wifi已关闭"); 
  36. chkOpenCloseWifiBox.setChecked(false); 
  37. // 获得WIFI信息 
  38. StringBuffer sb = new StringBuffer(); 
  39. sb.append("Wifi信息/n"); 
  40. sb.append("MAC地址:" + wifiInfo.getMacAddress() + "/n"); 
  41. sb.append("接入点的BSSID:" + wifiInfo.getBSSID() + "/n"); 
  42. sb.append("IP地址(int):" + wifiInfo.getIpAddress() + "/n"); 
  43. sb.append("IP地址(Hex):" + Integer.toHexString(wifiInfo.getIpAddress()) + "/n"); sb.append("IP地址:" + ipIntToString(wifiInfo.getIpAddress()) + "/n"); 
  44. sb.append("网络ID:" + wifiInfo.getNetworkId() + "/n"); 
  45. tvWifiInfo.setText(sb.toString()); 
  46. // 得到配置好的网络 
  47. wifiConfigurations = wifiManager.getConfiguredNetworks(); 
  48. tvWifiConfigurations.setText("已连接的无线网络/n"); 
  49. for (WifiConfiguration wifiConfiguration : wifiConfigurations) { 
  50. tvWifiConfigurations.setText(tvWifiConfigurations.getText() + wifiConfiguration.SSID + "/n"); 
  51. // 将int类型的IP转换成字符串形式的IP 
  52. private String ipIntToString(int ip) { 
  53. try { 
  54. byte[] bytes = new byte[4]; 
  55. bytes[0] = (byte) (0xff & ip); 
  56. bytes[1] = (byte) ((0xff00 & ip) >> 8); 
  57. bytes[2] = (byte) ((0xff0000 & ip) >> 16); 
  58. bytes[3] = (byte) ((0xff000000 & ip) >> 24); 
  59. return Inet4Address.getByAddress(bytes).getHostAddress(); 
  60. } catch (Exception e) { 
  61. return ""; 
  62. @Override 
  63. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
  64. // 当选中复选框时打开WIFI 
  65. if (isChecked) { 
  66. wifiManager.setWifiEnabled(true); 
  67. chkOpenCloseWifiBox.setText("Wifi已开启"); 
  68. // 当取消复选框选中状态时关闭WIFI 
  69. else { 
  70. wifiManager.setWifiEnabled(false); 
  71. chkOpenCloseWifiBox.setText("Wifi已关闭"); 
  72. }


       在AndroidManifest.xml文件中要使用如下的代码打开相应的权限。

Java代码:
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
  2. </uses-permission> 
  3. <uses-permission android:name="android.permission.WAKE_LOCK">
  4. </uses-permission> 
  5. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
  6. </uses-permission>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值