[英]How to get WIFI SSID in Android 9.0(PIE)?
如何在 Android 9.0(PIE) 中獲取 WIFI SSID? 我的代碼在 android 8.1.0 版本之前運行良好,但在 Android 9.0 上不起作用
ConnectivityManager connManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (networkInfo.isConnected()) {
WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
wifiInfo.getSSID();
String name = networkInfo.getExtraInfo();
String ssid = "\"" + wifiInfo.getSSID() + "\"";
}
但此代碼不適用於 Android 9.0
Android 版本 9 (Pie) 更改需要(由用戶)啟用位置,否則即使您的應用具有正確的權限,對 getConnectioInfo() 的調用也會失敗。 這在Android 9 更改中有記錄(摘錄如下):
限制訪問 Wi-Fi 位置和連接信息
在 Android 9 中,應用執行 Wi-Fi 掃描的權限要求比以前的版本更嚴格。 有關詳細信息,請參閱 Wi-Fi 掃描限制。
類似的限制也適用於 getConnectionInfo() 方法,它返回一個描述當前 Wi-Fi 連接的 WifiInfo 對象。 如果調用應用程序具有以下權限,則只能使用此對象的方法來檢索 SSID 和 BSSID 值:
檢索 SSID 或 BSSID 還需要在設備上啟用位置服務(在設置 > 位置下)。
就我而言,在嘗試讀取 WIFI SSID 之前,我調用下面的函數(僅當在 Android 9+ 上運行時)來檢測位置是否已啟用。
public static boolean isLocnEnabled(Context context) {
List locnProviders = null;
try {
LocationManager lm =(LocationManager) context.getApplicationContext().getSystemService(Activity.LOCATION_SERVICE);
locnProviders = lm.getProviders(true);
return (locnProviders.size() != 0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (BuildConfig.DEBUG) {
if ((locnProviders == null) || (locnProviders.isEmpty()))
Log.d(TAG, "Location services disabled");
else
Log.d(TAG, "locnProviders: " + locnProviders.toString());
}
}
return(false);
}
如果沒有啟用位置,我會彈出一個對話框,說它是必需的,並允許用戶跳轉到位置設置頁面(見下面的代碼):
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
這與權限有關....自 API 級別 27 以來,您需要ACCESS_FINE_LOCATION
或ACCESS_COARSE_LOCATION
權限。 您可能還需要CHANGE_WIFI_STATE
for Android 9(根據https://developer.android.com/guide/topics/connectivity/wifi-scan無論如何,wifi 掃描就是這種情況)
您可以通過位置權限訪問您在 Android 8 中連接到它的 ssid wifi,但在 android 9 中您必須打開位置。 在此處閱讀更多信息: https : //developer.android.com/about/versions/pie/android-9.0-changes-all
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.