본문 바로가기
안드로이드

[Android] 6. 데이터베이스 - 인터넷 연결상태 확인하기

qbang 2019. 8. 15.

이번 시간에는 6강 데이터베이스의 네번째 강의인 '인터넷 연결상태 확인하기' 리뷰입니다.

개념을 알아보면서 실습한 내용을 덧붙여 알아보도록 하겠습니다!

 


ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

단말기에서 인터넷이 되는 상태를 아닌지를 구분하는데에는 시스템 서비스 객체 중 ConnectivityManager 객체를 사용합니다.

또한, 시스템 서비스 객체를 참조할 때는 getSystemService 메소드를 사용합니다.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/button"
            android:layout_width="194dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="연결상태체크" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="106dp"
            android:layout_marginTop="0dp"
            android:text="대기중"
            android:textSize="50dp" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

 

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 

NetworkStatus.java

package com.example.myconnect;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkStatus {

    // 연결 상태를 정의
    public static final int TYPE_WIFI = 1;
    public static final int TYPE_MOBILE = 2;
    public static final int TYPE_NOT_CONNECTED = 3;

    public static int getConnectivityStatus(Context context){
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        // 권한 필요
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        if(networkInfo != null){
            // 3G나 LTE로 연결되었는지, 와이파이로 연결되었는지 구분
            int type = networkInfo.getType();
            // ConnectivityManager 객체의 getActiveNetworkInfo 메소드를 호출하면 NetworkInfo 객체가 반환되고 그 안에 상태 정보가 있음
            if(type == ConnectivityManager.TYPE_MOBILE){
                return TYPE_MOBILE;
            }else if(type == ConnectivityManager.TYPE_WIFI){
                return TYPE_WIFI;
            }

        }
        return TYPE_NOT_CONNECTED;

    }
}

연결상태를 확인하는 경우가 자주 생길 때를 대비하여 하나의 클래스로 정의하고,

NetworkStatus라는 이름의 클래스를 만들고 그 안에 세 가지 상태를 상수로 정의합니다.

 

MainActivity.java

package com.example.myconnect;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;

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

        textView = (TextView) findViewById(R.id.textView);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                int status = NetworkStatus.getConnectivityStatus(getApplicationContext());
                if (status == NetworkStatus.TYPE_MOBILE){
                    textView.setText("모바일로 연결됨");
                }else if(status == NetworkStatus.TYPE_WIFI){
                    textView.setText("와이파이로 연결됨");
                }else{
                    textView.setText("연결 안됨");
                }
            }
        });
    }
}

코드에 대한 설명은 주석으로 달아놨으니 천천히 읽어보시면 될 것 같습니다.

위 코드에 대한 결과 화면은 아래와 같습니다.

 

결과 화면

단말기의 상태를 보시면 4G로 인터넷에 연결되어 있습니다.

와이파이로 연결된 것이 아니니 '모바일로 연결됨'이 출력되었네요.

 

글 읽어주셔서 감사합니다 :)

댓글