扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
许久没有做一些总结了,最近项目有些忙。
创新互联建站网站建设服务商,为中小企业提供网站建设、成都网站制作服务,网站设计,网站托管维护等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出创新互联建站。在获取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名称:
这个终端的版本是Android 4.3 ,获取到的SSID名称是加了双引号的,没错,你看到的无线网名字就是"G.E.M",我是邓紫棋的粉丝;
另一个终端的系统版本和获取到的SSID名称:
这个终端的版本是Android 4.1.2 ,获取到的SSID名称没有加双引号。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流