Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

코틀린(Kotlin)으로 안드로이드 인터넷 연결 상태와 네트워크 유형 확인하는 방법

이 튜토리얼에서는 코틀린(Kotlin)을 사용해 안드로이드 앱에서 인터넷 연결 가능 여부와 네트워크 유형(예: Wi-Fi)을 확인하는 방법을 단계별로 살펴봅니다.

1단계 — 새 프로젝트 만들기

Android Studio에서 File → New Project를 선택한 뒤, 필요한 모든 항목을 입력해 새 프로젝트를 생성합니다.

2단계 — 레이아웃 파일 작성

다음 코드를 res/layout/activity_main.xml에 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="#008080"
        android:padding="5dp"
        android:text="TutorialsPoint"
        android:textColor="#fff"
        android:textSize="24sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textColor="@android:color/holo_purple"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

3단계 — MainActivity.kt 작성

다음 코드를 src/MainActivity.kt에 추가합니다.

import android.content.Context
import android.net.ConnectivityManager
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        textView = findViewById(R.id.textView)

        if (checkNetwork()) {
            Toast.makeText(this, "네트워크 연결이 가능합니다", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "네트워크 연결이 불가능합니다", Toast.LENGTH_SHORT).show()
        }
    }

    private fun checkNetwork(): Boolean {
        val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
        textView.text = "네트워크 유형: " + networkInfo!!.typeName
        return true
    }
}

4단계 — AndroidManifest.xml 설정

다음 코드를 androidManifest.xml에 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 다음, 툴바의 Run 아이콘코틀린(Kotlin)으로 안드로이드 인터넷 연결 상태와 네트워크 유형 확인하는 방법을 클릭하세요. 기기 선택 목록에서 사용 중인 모바일 기기를 고르면, 해당 기기 화면에 결과가 표시됩니다.

코틀린(Kotlin)으로 안드로이드 인터넷 연결 상태와 네트워크 유형 확인하는 방법

참고: 최신 권장 방식(API 29 이상)

위 예제에서 사용한 getNetworkInfo()는 API 29(Android 10)부터 공식적으로 지원이 중단(deprecated)되었습니다. 최신 환경을 대상으로 개발할 때는 activeNetworkNetworkCapabilities를 조합해 연결 상태를 확인하는 것이 좋습니다.

import android.net.NetworkCapabilities

private fun isNetworkAvailable(context: Context): Boolean {
    val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val network = connectivityManager.activeNetwork ?: return false
    val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
    return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
}

이 방식은 Wi-Fi, 모바일 데이터, 이더넷 등 전송 수단과 관계없이 실제 인터넷 사용 가능 여부를 더 정확하게 판별할 수 있습니다.