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

[JAVA][안드로이드] 브로드캐스트 리시버를 사용해 이어폰 연결 상태 체크하기

by teamnova 2021. 3. 28.

이번 포스팅에선 브로드캐스트 리시버를 사용해 이어폰 연결 상태를 확인하는 앱을 만들어 보겠습니다.

이어폰이 연결돼 있다면 이어폰이 연결됐습니다, 연결돼 있지 않다면 연결 해제됐습니다 라는 문장이 나오도록 할 겁니다.

핸드폰에 유선 이어폰을 연결해 사용할 경우 써볼 수 있는 코드입니다.

스틱코드에 저장된 코드를 불러와서 사용하는 방법으로 진행하겠습니다.

이 포스팅에서 사용한 스틱코드 링크는 아래에 있습니다.

stickode.com/detail.html?no=1981

 

스틱코드

 

stickode.com

 

먼저 화면부터 만들겠습니다. 이어폰 연결 상태를 확인하는 앱이기 때문에 텍스트뷰만 간단하게 만들었습니다.

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

    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:gravity="center"
        android:textSize="30sp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

다음은 자바 파일을 작성하겠습니다. 그 전에 리시버를 만들고 이어폰 연결 상태를 확인하도록 만들어야 합니다.

위 스틱코드 포스팅을 즐겨찾기했다면 곧바로 사용할 수 있습니다.

 

 

earphone_check라는 요소를 선택하면 아래 코드가 자동으로 입력됩니다.

아래 클래스를 만들 때는 onCreate() 바깥에 선언하는 걸 잊으면 안됩니다.

 

 // 이어폰 연결 여부를 토스트로 알려주는 리시버
    public class EarphoneReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            if (intent.getAction().equalsIgnoreCase(Intent.ACTION_HEADSET_PLUG))
            {
                if (intent.getIntExtra("state", 0) == 0)
                {
                    // 이어폰 빠짐
                    textView.setText("이어폰이 연결 해제됐습니다");
                }
                else if (intent.getIntExtra("state", 0) == 1)
                {
                    // 이어폰 껴짐
                    textView.setText("이어폰이 연결됐습니다");
                }
            }
        }
    }

위의 코드가 자동완성됐다면 onCreate() 안에도 코드들을 작성해줍니다.

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

        IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        MainActivity.EarphoneReceiver receiver = new MainActivity.EarphoneReceiver();
        registerReceiver(receiver, receiverFilter);

        textView = findViewById(R.id.textview);
    }

 

완성된 코드는 아래와 같습니다.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity
{
    final private static String TAG = "MainActivity";
    TextView textView;

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

        IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        MainActivity.EarphoneReceiver receiver = new MainActivity.EarphoneReceiver();
        registerReceiver(receiver, receiverFilter);

        textView = findViewById(R.id.textview);
    }

    // 이어폰 연결 여부를 토스트로 알려주는 리시버
    public class EarphoneReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            if (intent.getAction().equalsIgnoreCase(Intent.ACTION_HEADSET_PLUG))
            {
                if (intent.getIntExtra("state", 0) == 0)
                {
                    // 이어폰 빠짐
                    textView.setText("이어폰이 연결 해제됐습니다");
                }
                else if (intent.getIntExtra("state", 0) == 1)
                {
                    // 이어폰 껴짐
                    textView.setText("이어폰이 연결됐습니다");
                }
            }
        }
    }

}

 

이제 앱을 빌드해보겠습니다.

처음 앱을 시작하면 아래 화면이 나옵니다.

 

이제 이 상태에서 핸드폰에 유선 이어폰을 연결해 보겠습니다.

연결할 경우 문장이 아래와 같이 바뀌는 걸 볼 수 있습니다.

 

이걸 활용한다면 음악 앱을 만들거나 음악재생 기능을 구현할 때 이어폰이 연결돼 있지 않다면 이를 알려줘서, 사용자가 독서실이나 조용한 장소에서 유용하게 사용할 수 있을 것 같습니다.