LoginSignup
20
16

More than 5 years have passed since last update.

Androidのイヤホンの抜き差しを検知する

Posted at

はじめに

動画系のアプリを作ることになって調べた時のメモです。

概要

今やどの動画/音楽再生系のアプリも常識的に実装されている機能だと思いますが、電車で動画を見ている際にうっかりイヤホンが抜け、大音量で音声が鳴り響くなんて悲劇を避けるために、イヤホンが抜けたタイミングで再生を停止するためにはイヤホンの抜き差しを検知する必要があります。

実装

調べてみたらBroadcastIntentが飛んで来るようなのでそいつを拾って実現します。

BroadcastReceiverを継承したクラスを実装し、onReceive内でIntent.ACTION_HEADSET_PLUGstateから判別していきます。

HeadsetEventReceiver.kt
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.media.AudioManager

class HeadsetEventReceiver :BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
        if (intent == null || intent.action != Intent.ACTION_HEADSET_PLUG) {
            return
        }

        val state = intent.getIntExtra("state", AudioManager.SCO_AUDIO_STATE_ERROR)
        when(state) {
            AudioManager.SCO_AUDIO_STATE_DISCONNECTED -> {
                // 切断された時の処理
            }
            AudioManager.SCO_AUDIO_STATE_CONNECTED -> {
                // 接続された時の処理
            }
            else -> {
                // その他の場合の処理
            }
        }
    }
}

EmptyActivityに少しだけ実装を追加し、上記で定義したHeadsetEventReceiverクラスを登録/解除していきます。
今回はMainActivityですが、Serviceでも可でライフサイクルに沿ってregister, unregisterしてやれば良さそうです。

MainActivity.kt
import android.content.Intent
import android.content.IntentFilter
import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    private lateinit var receiver: HeadsetEventReceiver

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        receiver = HeadsetEventReceiver()
        registerReceiver(receiver, IntentFilter(Intent.ACTION_HEADSET_PLUG))
    }

    override fun onDestroy() {
        unregisterReceiver(receiver)
        super.onDestroy()
    }
}

ここまで完了したらビルドして実行すると、イヤホンの抜き差しのたびHeadsetEventReceiverのonReceiveに切断/接続のstateが送られてきます。

おわりに

思いの外簡単な実装でイヤホンの抜き差しが検知できるようになりました。

参考

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16