耳机插入接收器未接收广播

问题描述 投票:0回答:1

我正在尝试使用系统服务收听耳机的插入:

  class MainActivity : AppCompatActivity(){

  private lateinit var headphoneIntentFilter: IntentFilter
  private lateinit var headphoneReceiver:HeadphoneReceiver


    override fun onStart() {
    super.onStart()

    headphoneIntentFilter = IntentFilter(ACTION_HEADSET_PLUG)
    headphoneReceiver = HeadphoneReceiver()

    registerReceiver(headphoneReceiver,headphoneIntentFilter)

   }
}

接收者本身:

   class HeadphoneReceiver : BroadcastReceiver() {
   override fun onReceive(context: Context?, intent: Intent?) {

    AppLog.i(TAG,"HeadphoneBroadcastReceived")


    if (intent?.action == Intent.ACTION_HEADSET_PLUG) {

        when (intent.getIntExtra("state", -1)) {

            0 -> {

                AppLog.d(TAG, "Headset is unplugged")
                TTSUtils.getInstance(context!!).isEnabled = false

            }

            1 -> {

                AppLog.i(TAG, "Headset plugged in")
                TTSUtils.getInstance(context!!).loadService()

            }
        }
    }
}
}

我根本没有收到广播。我在嵌入式设备上使用OSS android的自定义派生,但我希望问题出在我的代码上。

android broadcastreceiver android-service
1个回答
0
投票

尝试ACTION_AUDIO_BECOMING_NOISY过滤器。

/**
 * Helper class for listening for when headphones are unplugged.
 */
private class BecomingNoisyReceiver(private val context: Context) : BroadcastReceiver() {

    private val noisyIntentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)

    private var registered = false

    fun register() {
        if (!registered) {
            context.registerReceiver(this, noisyIntentFilter)
            registered = true
        }
    }

    fun unregister() {
        if (registered) {
            context.unregisterReceiver(this)
            registered = false
        }
    }

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) {
            //Pause audio
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.