Android/Technic
getNetworkInfo deprecated 대응 (네트워크 연결상태 확인 구현)
등촌동 꼬북이
2021. 11. 5. 17:22
ConnectivityManager의 getNetworkInfo가 depreacted 되었다.
물론 좀 된 얘기지만..
아무튼 그래서 네트워크 연결 상태를 확인하는 코드를 다음과 같이 구현하였다.
public boolean isNetWorkAvailable(Context context) {
try {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Q 이상은 이렇게 대응 해야함
NetworkCapabilities networkType = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (networkType != null) {
return networkType.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
networkType.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
networkType.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET);
}
} else {
NetworkInfo exOsNetworkInfo = connectivityManager.getActiveNetworkInfo(); // Q 미만은 여기로
if (exOsNetworkInfo != null) {
return (exOsNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) ||
(exOsNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) ||
(exOsNetworkInfo.getType() == ConnectivityManager.TYPE_ETHERNET);
}
}
} catch (Exception e) {
return false;
}
return false;
}
OS 별로 대응도 가능 하도록 구현했고 WIFI, CELLULAR 그리고 진짜 간혹 이더넷;; 까지 대응할 수 있도록 구현했다..
아래처럼 구현해도 되는 듯
public boolean isNetWorkAvailable(Context context) {
try {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities networkType = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (networkType != null) {
return networkType.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
networkType.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
networkType.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET);
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}