您好,登錄后才能下訂單哦!
許久沒有做一些總結了,最近項目有些忙。
在獲取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文件里面添加如下權限的:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
效果圖:
我的一個終端的系統版本和獲取到的SSID名稱:
這個終端的版本是Android 4.3 ,獲取到的SSID名稱是加了雙引號的,沒錯,你看到的無線網名字就是"G.E.M",我是鄧紫棋的粉絲;
另一個終端的系統版本和獲取到的SSID名稱:
這個終端的版本是Android 4.1.2 ,獲取到的SSID名稱沒有加雙引號。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。