溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

有關(guān)WiFi SSID的獲取

發(fā)布時(shí)間:2020-07-29 16:48:51 來(lái)源:網(wǎng)絡(luò) 閱讀:5290 作者:wy521angel 欄目:移動(dòng)開(kāi)發(fā)

    許久沒(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):


有關(guān)WiFi SSID的獲取

有關(guān)WiFi SSID的獲取

    這個(gè)終端的版本是Android 4.3 ,獲取到的SSID名稱(chēng)是加了雙引號(hào)的,沒(méi)錯(cuò),你看到的無(wú)線網(wǎng)名字就是"G.E.M",我是鄧紫棋的粉絲;

    另一個(gè)終端的系統(tǒng)版本和獲取到的SSID名稱(chēng):

有關(guān)WiFi SSID的獲取

有關(guān)WiFi SSID的獲取

    這個(gè)終端的版本是Android 4.1.2 ,獲取到的SSID名稱(chēng)沒(méi)有加雙引號(hào)。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI