因工作需要顯示當前的網路狀態
所以我們會需要兩種資訊
wifi資訊與電信商網路資訊
這邊我就一併說明紀錄一下
WiFi 資訊
首先先設定Permisson
- ACCESS_WIFI_STATE
這個不是危險權限(參考湯老師的文章), 所以在android 6.0以上 不需要request permission.
提供官方相關文件連結: Requesting Permissions
1. 在Menifest 中加入權限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2. 在程式碼中宣告 WifiManager
為了避免leak, 官方建議使用getApplicationContext()的方式來取得
程式碼如下:
WifiManager wifiManager = (WifiManager)context.
getApplicationContext().getSystemService(Context.WIFI_SERVICE);
3. 取得 wifi 連線狀態
WifiInfo wifiInfo = wifiManager.getConnectionInfo() wifiInfo.getSSID(); //wifi id wifiInfo.getBSSID(); // wifi mac ip
我習慣寫成一個utils 來使用相關的東西
程式碼如下:
package com.owen.blogapp.widget;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
/**
* Created by owen on 2018/1/27.
*/
public class WifiUtils {
public static WifiInfo getWifiInfo(Context context) {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
return wifiManager.getConnectionInfo();
}
return null;
}
public static String getSSID(Context context) {
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
return wifiInfo.getSSID();
}
return null;
}
}
這樣在要使用的地方直接呼叫 WifiUtils.getSSID(context) 就可以取得了
這是在WiFiInfo 裡面的相關程式碼, 預設會加個雙引號, 可以自行去掉

而若都為空值, 則秀出 "<unkown ssid>"

WAN 資訊
這邊也一樣需要權限
1. 在Menifest 中加入權限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
在android 6.0(API 23) 以上, google 把權限給分開, 讓使用者可以自行決定權限是否給可以APP使用
所以對我們開發著來說, 就必須多做點事情拉
詳細的內容可以參考湯老師的Premisson文章來設定
2. 選告並取得資訊的程式法如下:
TelephonyManager telephonyManager =
(TelephonyManager) context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getNetworkOperatorName(); //取得電信商網路名稱(英文)
並把剛剛WiFiUtils 改成ConnectivityUtils 程式碼如下:
package com.owen.blogapp.widget;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.support.annotation.NonNull;
import android.telephony.TelephonyManager;
/**
* Created by owen on 2018/1/27.
*/
public class ConnectivityUtils {
public static WifiInfo getWifiInfo(@NonNull Context context) {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
return wifiManager.getConnectionInfo();
}
return null;
}
public static String getWifiSSID(@NonNull Context context) {
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
return wifiInfo.getSSID();
}
return null;
}
public static String getWANOperatorName(@NonNull Context context){
TelephonyManager telephonyManager =
(TelephonyManager) context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
if(telephonyManager != null) {
return telephonyManager.getNetworkOperatorName();
}
return null;
}
}
參考文件:
Android Requesting Permissions
[Android]利用 TelephonyManager 取得電信網路資訊
