您好,登錄后才能下訂單哦!
許久沒(méi)有做一些總結(jié)了,最近項(xiàng)目有些忙。
在獲取Android終端連接WiFi的SSID時(shí)(也就是你當(dāng)前手機(jī)連接的無(wú)線網(wǎng)名稱(chēng)),發(fā)現(xiàn)了一個(gè)問(wèn)題,不同的Android版本下獲取到的SSID是有一些差別的,當(dāng)然名字不會(huì)變。
舉個(gè)例子,比如我配置了WiFi的名稱(chēng)是haha,有些手機(jī)獲取到的就是haha,而有些獲取到的卻是"haha"——加了雙引號(hào)。有這么一個(gè)需求,控制用戶連接指定的WiFi。假定允許連接的WiFi列表里面有haha,hehe,houhou,huhu四個(gè),如果獲取到用戶當(dāng)前連接的WiFi名稱(chēng)是haha,那是允許用戶連接上去的,如果獲取到的是"haha",呃……也應(yīng)該允許用戶連接的,但是haha和"haha"兩者,代碼里做比較是不同的,事實(shí)上獲取到"haha"名稱(chēng)的用戶,連不上WiFi。(唉,按規(guī)定連接了你允許連接的WiFi,還是上不去,用戶我也只能呵呵了)。
有人說(shuō)可以查找一下用戶連接的WiFi名稱(chēng),如果發(fā)現(xiàn)里面有雙引號(hào),那就去掉。這樣并不妥,如果WiFi本來(lái)的名稱(chēng)便帶有雙引號(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名稱(chēng)和手機(jī)的Android版本有關(guān),如果是Android 4.2(API Level = 17)及其以上的版本,獲取到的SSID名稱(chēng)是有雙引號(hào)的,即"haha",如果是Android 4.2以下的版本,獲取到的SSID名稱(chēng)沒(méi)有雙引號(hào),即haha。我寫(xiě)了一個(gè)方法,根據(jù)終端的Android版本來(lái)去掉雙引號(hào),以便使不同Android版本的用戶獲取到的SSID名稱(chēng),可以匹配到WiFi列表里面允許連接的SSID。
布局文件的代碼是比較簡(jiǎn)單的,就不貼了,兩個(gè)TextView,分別顯示直接獲取到的SSID名稱(chēng)和去掉雙引號(hào)之后的SSID名稱(chēng),一個(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)限的:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
效果圖:
我的一個(gè)終端的系統(tǒng)版本和獲取到的SSID名稱(chēng):
這個(gè)終端的版本是Android 4.3 ,獲取到的SSID名稱(chēng)是加了雙引號(hào)的,沒(méi)錯(cuò),你看到的無(wú)線網(wǎng)名字就是"G.E.M",我是鄧紫棋的粉絲;
另一個(gè)終端的系統(tǒng)版本和獲取到的SSID名稱(chēng):
這個(gè)終端的版本是Android 4.1.2 ,獲取到的SSID名稱(chēng)沒(méi)有加雙引號(hào)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。