본문 바로가기
안드로이드 자바

[Android][Java] ConnectivityManager를 활용하여 현재 인터넷 상태 가져오기

by teamnova 2023. 9. 6.

 

ConnectivityManager 란?

 

ConnectivityManager 네트워크 연결 상태를 관리하는 역할을 하는 안드로이드 시스템 서비스 입니다. ConnectivityManager활용 하여 현제 Wi-Fi, 모바일 데이터, 이더넷 등 어떤 네트워크를 사용하는지 파악하거나 네트워크 연결 여부를 확인할 수 있습니다.

 

자세한 내용은 아래 링크에서 확인해보세요 ! 

https://developer.android.com/reference/android/net/ConnectivityManager

 

ConnectivityManager  |  Android Developers

 

developer.android.com

 

ConnectivityManager 를 활용하여 현제 인터넷이 연결 되어 있는지 확인하는 코드를 작성해 보겠습니다.

코드는 다음과 같습니다.

 

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView InternetCheck;
    Button button4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 레이아웃에서 버튼과 텍스트뷰 객체를 찾아서 초기화
        button4 = findViewById(R.id.button4);
        InternetCheck = findViewById(R.id.InternetCheck);

        // 버튼 클릭 이벤트 리스너 설정
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // CheckNetWork() 메서드를 호출하여 인터넷 연결 상태를 확인하고 결과에 따라 텍스트뷰에 출력
                if (CheckNetWork()) {
                    InternetCheck.setText("인터넷 연결");
                } else {
                    InternetCheck.setText("인터넷 안됨");
                }
            }
        });
    }

    // 인터넷 연결 상태를 확인하는 메서드
    public boolean CheckNetWork() {
        // ConnectivityManager 객체를 가져옴
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        // 안드로이드 버전이 M 이상인 경우
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 현재 활성화된 네트워크 가져오기
            Network network = connectivityManager.getActiveNetwork();
            if (network != null) {
                // 네트워크가 존재하는 경우 NetworkCapabilities를 이용하여 네트워크 종류 확인
                NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
                return networkCapabilities != null && (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
                        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
            } else {
                // 네트워크가 존재하지 않는 경우 기존 방식으로 NetworkInfo를 이용하여 네트워크 종류 확인
                NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
                return activeNetwork != null &&
                        (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI ||
                                activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE);
            }
        }

        // 안드로이드 버전이 M 미만인 경우, 기존 방식으로 NetworkInfo를 이용하여 네트워크 종류 확인
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        return activeNetwork != null &&
                (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI ||
                        activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE);
    }
}

 

결과는 다음과 같습니다.