许久没有做一些总结了,最近项目有些忙。

    在获取Android终端连接WiFi的SSID时(也就是你当前手机连接的无线网名称),发现了一个问题,不同的Android版本下获取到的SSID是有一些差别的,当然名字不会变。

    举个例子,比如我配置了WiFi的名称是haha,有些手机获取到的就是haha,而有些获取到的却是"haha"——加了双引号。有这么一个需求,控制用户连接指定的WiFi。假定允许连接的WiFi列表里面有haha,hehe,houhou,huhu四个,如果获取到用户当前连接的WiFi名称是haha,那是允许用户连接上去的,如果获取到的是"haha",呃……也应该允许用户连接的,但是haha和"haha"两者,代码里做比较是不同的,事实上获取到"haha"名称的用户,连不上WiFi。(唉,按规定连接了你允许连接的WiFi,还是上不去,用户我也只能呵呵了)。

    有人说可以查找一下用户连接的WiFi名称,如果发现里面有双引号,那就去掉。这样并不妥,如果WiFi本来的名称便带有双引号呢?事实上应该从手机的Android版本来判断,先看一下获取WiFi SSID的方法:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();final String ssid = wifiInfo.getSSID();

    getSSID()获取到的SSID名称和手机的Android版本有关,如果是Android 4.2(API Level = 17)及其以上的版本,获取到的SSID名称是有双引号的,即"haha",如果是Android 4.2以下的版本,获取到的SSID名称没有双引号,即haha。我写了一个方法,根据终端的Android版本来去掉双引号,以便使不同Android版本的用户获取到的SSID名称,可以匹配到WiFi列表里面允许连接的SSID。

    布局文件的代码是比较简单的,就不贴了,两个TextView,分别显示直接获取到的SSID名称和去掉双引号之后的SSID名称,一个Button,点击后获取到当前终端连接的SSID。

    Java代码如下:

package com.example.ssidtest;import android.app.Activity;import android.content.Context;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Build;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class ShowSSIDActivity extends Activity { private int deviceVersion;  @Override protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);  setContentView(R.layout.activity_show_ssid);  WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  WifiInfo wifiInfo = wifiManager.getConnectionInfo();  final String ssid = wifiInfo.getSSID();    findViewById(R.id.btn).setOnClickListener(new OnClickListener() {     @Override   public void onClick(View v) {       ((TextView) findViewById(R.id.txt1)).setText(ssid);    ((TextView) findViewById(R.id.txt2))      .setText(whetherToRemoveTheDoubleQuotationMarks(ssid));   }  }); }  //根据Android的版本判断获取到的SSID是否有双引号 public String whetherToRemoveTheDoubleQuotationMarks(String ssid) {   //获取Android版本号  deviceVersion = Build.VERSION.SDK_INT;    if (deviceVersion >= 17) {     if (ssid.startsWith("\"") && ssid.endsWith("\"")) {       ssid = ssid.substring(1, ssid.length() - 1);   }     }  return ssid; } }

    其中,whetherToRemoveTheDoubleQuotationMarks(String ssid)便是根据终端版本号判断是否需要去掉双引号。

    最后别忘了获取SSID是要在manifest文件里面添加如下权限的:

    效果图:

    我的一个终端的系统版本和获取到的SSID名称:


有关WiFi SSID的获取_第1张图片

有关WiFi SSID的获取_第2张图片

    这个终端的版本是Android 4.3 ,获取到的SSID名称是加了双引号的,没错,你看到的无线网名字就是"G.E.M",我是邓紫棋的粉丝;

    另一个终端的系统版本和获取到的SSID名称:

有关WiFi SSID的获取_第3张图片

有关WiFi SSID的获取_第4张图片

    这个终端的版本是Android 4.1.2 ,获取到的SSID名称没有加双引号。

更多相关文章

  1. Android各版本发布时间及对应API(2019.3.2截至Android最新版本 P)m
  2. 高版本Android如何利用反射调用系统隐藏的远程服务拦截来电
  3. [置顶] ADT版本号超过17后,所遇到的问题,如导入项目没有Android De
  4. Android学习路线(十九)支持不同设备——支持不同(Android)平台版本
  5. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单
  6. APP如何适配不同的Android版本
  7. Android参考之代号、标签和版本号
  8. android:versionCode、android:versionName之实现第一次登陆、版
  9. 【源码】android新闻日报源码、android 企业级erp商业应用源码、

随机推荐

  1. Android(安卓)Room牛刀小试
  2. Android(安卓)流式布局
  3. Android(安卓)常见Action
  4. 提高android gradle构建速度的努力
  5. Android(安卓)多语言支持
  6. android 9.png图片原理及制作
  7. android gallery3d 源码分析(一)
  8. Android(安卓)x86模拟器Intel Atom x86 S
  9. Android(安卓)ADT下载安装
  10. Android《第五章:ContentProvider》