본문 바로가기
안드로이드 코틀린

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

by teamnova 2023. 12. 5.

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

 

ConnectivityManager를 활용하여 현재 인터넷 상태 가져오기 코틀린 버전입니다.

자바 버전은 https://stickode.tistory.com/916 를 확인해주세요

 

ConnectivityManager 란?

 

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

 

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

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

 

ConnectivityManager  |  Android Developers

 

developer.android.com

 

먼저 MainActivity 입니다.

class MainActivity : AppCompatActivity() {
    private lateinit var InternetCheck: TextView
    private lateinit var button4: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

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

        // 버튼 클릭 이벤트 리스너 설정
        button4.setOnClickListener {
            // CheckNetWork() 메서드를 호출하여 인터넷 연결 상태를 확인하고 결과에 따라 텍스트뷰에 출력
            if (CheckNetWork()) {
                InternetCheck.text = "인터넷 연결"
            } else {
                InternetCheck.text = "인터넷 안됨"
            }
        }
    }

    // 인터넷 연결 상태를 확인하는 메서드
    private fun CheckNetWork(): Boolean {
        // ConnectivityManager 객체를 가져옴
        val connectivityManager =
            getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

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

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

activity_main.xml 입니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


    <TextView
        android:id="@+id/InternetCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/button4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

실행 영상입니다.