close

因工作需要顯示當前的網路狀態

所以我們會需要兩種資訊

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 裡面的相關程式碼, 預設會加個雙引號, 可以自行去掉

螢幕快照 2018-01-28 上午11.25.46.png

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

螢幕快照 2018-01-28 上午11.25.37.png

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

湯老師的Permisson 設定

[Android]利用 TelephonyManager 取得電信網路資訊

 

arrow
arrow

    Owen Chen 發表在 痞客邦 留言(0) 人氣()