許久沒(méi)有做一些總結(jié)了,最近項(xiàng)目有些忙。
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管維護(hù)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)建站。在獲取Android終端連接WiFi的SSID時(shí)(也就是你當(dāng)前手機(jī)連接的無(wú)線網(wǎng)名稱),發(fā)現(xiàn)了一個(gè)問(wèn)題,不同的Android版本下獲取到的SSID是有一些差別的,當(dāng)然名字不會(huì)變。
舉個(gè)例子,比如我配置了WiFi的名稱是haha,有些手機(jī)獲取到的就是haha,而有些獲取到的卻是"haha"——加了雙引號(hào)。有這么一個(gè)需求,控制用戶連接指定的WiFi。假定允許連接的WiFi列表里面有haha,hehe,houhou,huhu四個(gè),如果獲取到用戶當(dāng)前連接的WiFi名稱是haha,那是允許用戶連接上去的,如果獲取到的是"haha",呃……也應(yīng)該允許用戶連接的,但是haha和"haha"兩者,代碼里做比較是不同的,事實(shí)上獲取到"haha"名稱的用戶,連不上WiFi。(唉,按規(guī)定連接了你允許連接的WiFi,還是上不去,用戶我也只能呵呵了)。
有人說(shuō)可以查找一下用戶連接的WiFi名稱,如果發(fā)現(xiàn)里面有雙引號(hào),那就去掉。這樣并不妥,如果WiFi本來(lái)的名稱便帶有雙引號(hào)呢?事實(shí)上應(yīng)該從手機(jī)的Android版本來(lái)判斷,先看一下獲取WiFi SSID的方法:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); final String ssid = wifiInfo.getSSID();
getSSID()獲取到的SSID名稱和手機(jī)的Android版本有關(guān),如果是Android 4.2(API Level = 17)及其以上的版本,獲取到的SSID名稱是有雙引號(hào)的,即"haha",如果是Android 4.2以下的版本,獲取到的SSID名稱沒(méi)有雙引號(hào),即haha。我寫了一個(gè)方法,根據(jù)終端的Android版本來(lái)去掉雙引號(hào),以便使不同Android版本的用戶獲取到的SSID名稱,可以匹配到WiFi列表里面允許連接的SSID。
布局文件的代碼是比較簡(jiǎn)單的,就不貼了,兩個(gè)TextView,分別顯示直接獲取到的SSID名稱和去掉雙引號(hào)之后的SSID名稱,一個(gè)Button,點(diǎn)擊后獲取到當(dāng)前終端連接的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)); } }); } //根據(jù)Android的版本判斷獲取到的SSID是否有雙引號(hào) public String whetherToRemoveTheDoubleQuotationMarks(String ssid) { //獲取Android版本號(hào) 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)便是根據(jù)終端版本號(hào)判斷是否需要去掉雙引號(hào)。
最后別忘了獲取SSID是要在manifest文件里面添加如下權(quán)限的:
效果圖:
我的一個(gè)終端的系統(tǒng)版本和獲取到的SSID名稱:
這個(gè)終端的版本是Android 4.3 ,獲取到的SSID名稱是加了雙引號(hào)的,沒(méi)錯(cuò),你看到的無(wú)線網(wǎng)名字就是"G.E.M",我是鄧紫棋的粉絲;
另一個(gè)終端的系統(tǒng)版本和獲取到的SSID名稱:
這個(gè)終端的版本是Android 4.1.2 ,獲取到的SSID名稱沒(méi)有加雙引號(hào)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。