이번 포스팅에선 브로드캐스트 리시버를 사용해 이어폰 연결 상태를 확인하는 앱을 만들어 보겠습니다.
이어폰이 연결돼 있다면 이어폰이 연결됐습니다, 연결돼 있지 않다면 연결 해제됐습니다 라는 문장이 나오도록 할 겁니다.
핸드폰에 유선 이어폰을 연결해 사용할 경우 써볼 수 있는 코드입니다.
스틱코드에 저장된 코드를 불러와서 사용하는 방법으로 진행하겠습니다.
이 포스팅에서 사용한 스틱코드 링크는 아래에 있습니다.
stickode.com/detail.html?no=1981
먼저 화면부터 만들겠습니다. 이어폰 연결 상태를 확인하는 앱이기 때문에 텍스트뷰만 간단하게 만들었습니다.
<?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("이어폰이 연결됐습니다");
}
}
}
}
}
이제 앱을 빌드해보겠습니다.
처음 앱을 시작하면 아래 화면이 나옵니다.
이제 이 상태에서 핸드폰에 유선 이어폰을 연결해 보겠습니다.
연결할 경우 문장이 아래와 같이 바뀌는 걸 볼 수 있습니다.
이걸 활용한다면 음악 앱을 만들거나 음악재생 기능을 구현할 때 이어폰이 연결돼 있지 않다면 이를 알려줘서, 사용자가 독서실이나 조용한 장소에서 유용하게 사용할 수 있을 것 같습니다.
'안드로이드 자바' 카테고리의 다른 글
[JAVA][안드로이드] 간단 사이드 메뉴바 (Navigate Drawer) 구현 (3) | 2021.03.30 |
---|---|
[JAVA][안드로이드] 그림판 앱 구현하기 (0) | 2021.03.29 |
[Java][Andoird] Picasso 라이브러리를 활용하여 이미지 URL을 ImageView에 쉽게 띄우기 (0) | 2021.03.27 |
[Java][Android] Volley를 이용한 회원가입, 로그인(HTTP통신) (0) | 2021.03.26 |
[JAVA][안드로이드] TelephonyManager를 이용한 mp3 플레이어 제어 빠르게 구현 하기 (0) | 2021.03.25 |