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

[经验分享] Android WIFI 简单用法

[复制链接]

尚未签到

发表于 2015-10-1 08:27:16 | 显示全部楼层 |阅读模式
  随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了。例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话。可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi。下面就简单来说一下WifiManager的简单用法把。
  
  权限:
  为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限:
  //本例中使用了前两个。具体请按照需要添加权限。
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  <uses-permission android:name="adnroid.permission.CHANGE_WIFI_STATE"></uses-permission>
  
  <uses-permission android:name="adnroid.permission.ACCESS_CHECKIN_PROPERTTES"></uses-permission>
  <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission>
  
  获取当前连接WIFI信息


DSC0000.gif DSC0001.gif


    // 获取WifiManager
final WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
btnStart = (Button) findViewById(R.id.button1);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 获取当前连接WIFI的信息
WifiInfo info = wm.getConnectionInfo();
// 判断当前是否有连接的WIFI
if (info.getBSSID() != null) {
// 信号强度
int strength = WifiManager.calculateSignalLevel(
info.getRssi(), 100);
// 连接速度
int speed = info.getLinkSpeed();
// 获取BSSID地址。
String bssid = info.getBSSID();
// 获取SSID地址。 需要连接网络的ID
String ssid = info.getSSID();
String text = String.format(
"当前Wifi信号强度%s,网络速度%s,SSID:%s,BSSID:%s", strength,
speed, ssid, bssid);
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT)
.show();
}
}
});
View Code  
  WifiInfo类常用的方法
  info.getBSSID():   获取BSSID地址。
info.getSSID():       获取SSID地址。  需要连接网络的ID
info.getIpAddress():  获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每个XXX为一个字节
info.getMacAddress(): 获取MAC地址。
info.getNetworkId():  获取网络ID。
info.getLinkSpeed():  获取连接速度,可以让用户获知这一信息(单位Mbps)。
info.getRssi():     获取RSSI,RSSI就是接受信号强度指示。
  
  PS:可以使用WifiManager的setWifiEnable 开启或者禁用WIFI硬件。或者使用getWifiState,或者isWifiEnable方法请求当前Wifi状态
  
  
  
  监听Wifi连接
  监听WIFI可以让我们的应用程序更健壮。如正在播放音乐时WIFI断开连接,提醒用户。
  监听WIFI有两种方式:
  (1)使用ConnectivityManager类来实现。其他随笔中写
  (2)使用BroadcastReceiver监听,每当Wifi连接发生变化时,WifiManager会广播对应的Intent。告知当前WIFI的状态。
  常用的Inten Action如下:
  
  (1)WIFI_STATE_CHANGED_ACTION:当wifi硬件已经发生变化广播,常用的几种状态“enabling”,“enabled”,“disabling”,“disabled”,“unknown”等,他包含了两个Extra。
  EXTRA_WIFI_STATE:新的wifi状态
  EXTRA_PREVIOUS_STATE:前一次的Wifi状态。
  
  (2)SUPPLICANT_CONNECTION_CHANGE_ACTION:请求的连接已经建立(现在可以使用),或连接请求已经丢失。他包含了一个EXTRA。
  EXTRA_NEW_STATE:参数值是“true” 或 “false”
  
  (3)NETWORK_STATE_CHANGED_ACTION:当WIFI连接状态发生变化时触发,他包含了两个Extran,
  EXTRA_NETWORK_INFO:  包含了详细描述当前网络状态的networkInfo对象
  EXTRAN_BSSID:  当前所连接接入点的BSSID
  
  (4)RSSI_CHANGED_ACTION:可以用来监听当前连接WIFI的信号强度。为了获取当前WIFI信号强度需要使用WifiManager.calculateSignalLevel来设置信号强度范围,他会把当前的信号强  度,按照设置的范围返回一个整型数值。(如:WifiManager.calculateSignalLevel(wifimanager.getRssi(),100)当信号最强的时候可以返回99,因为他是从0开始计算的所以不会到    100)。他包含了一个Extra。
  EXTRA_NEW_RSSI :保存了当前连接的信号强度。
  
  代码:





public class WifiBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 监听当前连接的WIFI状态
int state = intent.getIntExtra("wifi_state",
WifiManager.WIFI_STATE_DISABLED);
switch (state) {
case WifiManager.WIFI_STATE_DISABLING:
// 正在停止
break;
case WifiManager.WIFI_STATE_DISABLED:
// 已停止
break;
case WifiManager.WIFI_STATE_ENABLING:
// 正在打开
break;
case WifiManager.WIFI_STATE_ENABLED:
// 已开启
break;
case WifiManager.WIFI_STATE_UNKNOWN:
// 未知
break;
}
}
}
View Code  
  在AndroidManifest.xml 注册BroadcasetReceiver
  <receiver android:name=".WifiBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>
  
  PS:此处还可以监听更多的关于WifiManageer广播的Intent。如上面的四个比较常用的。
  
  扫描,管理WIFI
  (1)扫描WIFI热点





        // 获取WifiManager
final WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
btnStart = (Button) findViewById(R.id.button1);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//开始扫描
                wm.startScan();
}
});
// 注册广播,接收wifi扫描结果
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 获取所有扫描到的WIFI,可以获取Wifi的相关信息。如信号强度,链接速度,SSID,身份验证等
List<ScanResult> list = wm.getScanResults();
Toast.makeText(MainActivity.this,
MessageFormat.format("共找到{0}个wifi", list.size()),
Toast.LENGTH_SHORT).show();
}
}, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
View Code  
  ps:这里注意一下intent filter的Action是“SCAN_RESULTS_AVAILABLE_ACTION”
  
  (2)管理WIFI
  





        // 获取WifiManager
final WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
btnStart = (Button) findViewById(R.id.button1);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 获取已配置WIFI列表
List<WifiConfiguration> list = wm.getConfiguredNetworks();
if (list.size() > 0) {
String txt = "";
for (WifiConfiguration wc : list) {
txt += wc.SSID + " ";
}
Toast.makeText(
MainActivity.this,
MessageFormat.format("您已经配置了{0}个wifi连接,分别是{1}",
list.size(), txt), Toast.LENGTH_SHORT)
.show();
boolean disableOthers=true;
//连接第一个WIFI,其他WIFI不可用
wm.enableNetwork(list.get(0).networkId, disableOthers);
}
}
});
View Code  

运维网声明 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-121125-1-1.html 上篇帖子: android4.0 wifi 和蓝牙模拟器上不显示解决方法 下篇帖子: 为Ubuntu笔记本电脑设置WiFi热点共享上网
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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