欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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 模块的朋友可以参考下。