안드로이드 자바

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

teamnova 2021. 3. 28. 12:00
728x90

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

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

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

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

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

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("이어폰이 연결됐습니다");
                }
            }
        }
    }

}

 

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

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

 

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

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

 

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