因工作需要顯示當前的網路狀態
所以我們會需要兩種資訊
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 取得電信網路資訊
留言列表