设为首页 收藏本站
查看: 1081|回复: 0

[经验分享] Android 控制WIFI相关操作

[复制链接]

尚未签到

发表于 2015-10-1 14:44:29 | 显示全部楼层 |阅读模式
Android 控制WIFI相关操作
作者:徐福安 发表于2011-5-29 22:36:25      DSC0000.gif 评论(0)      DSC0001.gif 阅读(1156)   
  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设备成功连接,然后运行本节的例子,会看到如图所示的输出信息。
  
  本例的完整实现代码如下:


Java代码

  • 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(&quot;Wifi已开启&quot;);   
  • chkOpenCloseWifiBox.setChecked(true);   
  • } else {   
  • chkOpenCloseWifiBox.setText(&quot;Wifi已关闭&quot;);   
  • chkOpenCloseWifiBox.setChecked(false);   
  • }   
  • // 获得WIFI信息   
  • StringBuffer sb = new StringBuffer();   
  • sb.append(&quot;Wifi信息\n&quot;);   
  • sb.append(&quot;MAC地址:&quot; &#43; wifiInfo.getMacAddress() &#43; &quot;\n&quot;);   
  • sb.append(&quot;接入点的BSSID:&quot; &#43; wifiInfo.getBSSID() &#43; &quot;\n&quot;);   
  • sb.append(&quot;IP地址(int):&quot; &#43; wifiInfo.getIpAddress() &#43; &quot;\n&quot;);   
  • sb.append(&quot;IP地址(Hex):&quot; &#43; Integer.toHexString(wifiInfo.getIpAddress()) &#43; &quot;\n&quot;); sb.append(&quot;IP地址:&quot; &#43; ipIntToString(wifiInfo.getIpAddress()) &#43; &quot;\n&quot;);   
  • sb.append(&quot;网络ID:&quot; &#43; wifiInfo.getNetworkId() &#43; &quot;\n&quot;);   
  • tvWifiInfo.setText(sb.toString());   
  • // 得到配置好的网络   
  • wifiConfigurations = wifiManager.getConfiguredNetworks();   
  • tvWifiConfigurations.setText(&quot;已连接的无线网络\n&quot;);   
  • for (WifiConfiguration wifiConfiguration : wifiConfigurations) {   
  • tvWifiConfigurations.setText(tvWifiConfigurations.getText() &#43; wifiConfiguration.SSID &#43; &quot;\n&quot;);   
  • }   
  • }   
  • // 将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 &quot;&quot;;   
  • }   
  • }   
  •   
  • @Override   
  • public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {   
  • // 当选中复选框时打开WIFI   
  • if (isChecked) {   
  • wifiManager.setWifiEnabled(true);   
  • chkOpenCloseWifiBox.setText(&quot;Wifi已开启&quot;);   
  • }   
  • // 当取消复选框选中状态时关闭WIFI   
  • else {   
  • wifiManager.setWifiEnabled(false);   
  • chkOpenCloseWifiBox.setText(&quot;Wifi已关闭&quot;);   
  • }   
  • }   
  •   
  • }  
  


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

Java代码:


XML/HTML代码

  • <uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot;>  
  • </uses-permission>   
  • <uses-permission android:name=&quot;android.permission.WAKE_LOCK&quot;>  
  • </uses-permission>   
  • <uses-permission android:name=&quot;android.permission.CHANGE_WIFI_STATE&quot;>  
  • </uses-permission>  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121432-1-1.html 上篇帖子: [转载]Android网络:由手机与手机WIFI互传照片谈Android TCP Socket开发要点 下篇帖子: 手机通过电脑无线网卡上网 建立wifi热点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表