Android 控制wifi 相关操作实例
程序员文章站
2024-03-04 15:44:41
android 控制wifi相关操作
wifi的全称是wireless fidelity,又称802.11b标准,是一种高速的无线通信协议,传输速度可以达到11mb/s。...
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设备成功连接,然后运行
本节的例子,会看到如图所示的输出信息。
本例的完整实现代码如下:
package eoe.demo.wifi; import java.net.inet4address; import java.util.list; import android.app.activity; import android.content.context; import android.net.wifi.wificonfiguration; import android.net.wifi.wifiinfo; import android.net.wifi.wifimanager; import android.os.bundle; import android.widget.checkbox; import android.widget.compoundbutton; import android.widget.textview; import android.widget.compoundbutton.oncheckedchangelistener; public class main extends activity implements oncheckedchangelistener { private wifimanager wifimanager; private wifiinfo wifiinfo; private checkbox chkopenclosewifibox; private list<wificonfiguration> wificonfigurations; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // 获得wifimanager对象 wifimanager = (wifimanager) getsystemservice(context.wifi_service); // 获得连接信息对象 wifiinfo = wifimanager.getconnectioninfo(); chkopenclosewifibox = (checkbox) findviewbyid(r.id.chkopenclosewifi); textview tvwificonfigurations = (textview) findviewbyid(r.id.tvwificonfigurations); textview tvwifiinfo = (textview) findviewbyid(r.id.tvwifiinfo); chkopenclosewifibox.setoncheckedchangelistener(this); // 根据当前wifi的状态(是否被打开)设置复选框的选中状态 if (wifimanager.iswifienabled()) { chkopenclosewifibox.settext("wifi已开启"); chkopenclosewifibox.setchecked(true); } else { chkopenclosewifibox.settext("wifi已关闭"); chkopenclosewifibox.setchecked(false); } // 获得wifi信息 stringbuffer sb = new stringbuffer(); sb.append("wifi信息\n"); sb.append("mac地址:" + wifiinfo.getmacaddress() + "\n"); sb.append("接入点的bssid:" + wifiinfo.getbssid() + "\n"); sb.append("ip地址(int):" + wifiinfo.getipaddress() + "\n"); sb.append("ip地址(hex):" + integer.tohexstring(wifiinfo.getipaddress()) + "\n"); sb.append("ip地址:" + ipinttostring(wifiinfo.getipaddress()) + "\n"); sb.append("网络id:" + wifiinfo.getnetworkid() + "\n"); tvwifiinfo.settext(sb.tostring()); // 得到配置好的网络 wificonfigurations = wifimanager.getconfigurednetworks(); tvwificonfigurations.settext("已连接的无线网络\n"); for (wificonfiguration wificonfiguration : wificonfigurations) { tvwificonfigurations.settext(tvwificonfigurations.gettext() + wificonfiguration.ssid + "\n"); } } // 将int类型的ip转换成字符串形式的ip private string ipinttostring(int ip) { try { byte[] bytes = new byte[4]; bytes[0] = (byte) (0xff & ip); bytes[1] = (byte) ((0xff00 & ip) >> 8); bytes[2] = (byte) ((0xff0000 & ip) >> 16); bytes[3] = (byte) ((0xff000000 & ip) >> 24); return inet4address.getbyaddress(bytes).gethostaddress(); } catch (exception e) { return ""; } } @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { // 当选中复选框时打开wifi if (ischecked) { wifimanager.setwifienabled(true); chkopenclosewifibox.settext("wifi已开启"); } // 当取消复选框选中状态时关闭wifi else { wifimanager.setwifienabled(false); chkopenclosewifibox.settext("wifi已关闭"); } } }
在androidmanifest.xml文件中要使用如下的代码打开相应的权限。
xml/html代码 <uses-permission android:name="android.permission.access_wifi_state"> </uses-permission> <uses-permission android:name="android.permission.wake_lock"> </uses-permission> <uses-permission android:name="android.permission.change_wifi_state"> </uses-permission>
以上就是对android wifi 简单实例的源码,在做android开发wifi 模块的朋友可以参考下。