android - 耳机插入接收器收不到广播
问题描述
我正在尝试使用系统服务监听耳机的插入:
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 的自定义分支,但我希望问题出在我的代码上。
解决方案
试试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
}
}
}
推荐阅读
- reactjs - 我怎么能在 useState React 中发送 setStateAction
- ruby-on-rails - 如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?
- python - Google Places API,如何获得下 20 个结果?
- r - 如何使用变量作为ggplot的参数?
- javascript - 从选择元素中选择选项时,控制台日志加倍
- javascript - 使用 JavaScript 获取 textarea 值并将其插入到地图上
- ios - 如何在烛台图表的蜡烛顶部和底部绘制自定义视图
- sql - 访问数据库。VBA 查询
- objective-c - 如何用同一个对象(NSString)填充整个 NSMutableArray
- spring-boot - 如何在 feign client spriong Boot 中设置值