gpt4 book ai didi

android - Activity 开始时收到 Intent.ACTION_HEADSET_PLUG

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:38 24 4
gpt4 key购买 nike

我试图在耳机拔下时暂停正在播放的音乐。

我创建了一个 BroadcastReceiver,用于监听 ACTION_HEADSET_PLUG Intent 并在 state extra 为 0(表示未插入)时对其执行操作。我的问题是,每当 Activity 开始时,我的 BroadcastReceiver 就会收到 ACTION_HEADSET_PLUG Intent 。这不是我所期望的行为。我希望只有在插入或拔下耳机时才会触发 Intent。

在使用 IntentFilter 注册接收器后立即捕获 ACTION_HEADSET_PLUG Intent 是否有原因?有没有明确的方法可以解决这个问题?

我假设,因为默认音乐播放器在拔下耳机时实现了类似的功能,所以这是可能的。

我错过了什么?

这是注册码

registerReceiver(new HeadsetConnectionReceiver(), 
new IntentFilter(Intent.ACTION_HEADSET_PLUG));

这是HeadsetConnectionReceiver的定义

public class HeadsetConnectionReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
Log.w(TAG, "ACTION_HEADSET_PLUG Intent received");
}

}

最佳答案

感谢 jack 的回复。我应该更新原始帖子以表明我发现了我遇到的问题。经过一些研究,我发现 ACTION_HEADSET_PLUG Intent 是使用 sendStickyBroadcast 广播的。上下文中的方法。

Sticky Intents 在广播后被系统持有。每当注册一个新的 BroadcastReceiver 来接收它时,该 Intent 就会被捕获。它在包含最后更新值的注册后立即触发。对于耳机,这有助于在您首次注册接收器时确定耳机是否已插入。

这是我用来接收 ACTION_HEADSET_PLUG Intent 的代码:

 private boolean headsetConnected = false;

public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("state")){
if (headsetConnected && intent.getIntExtra("state", 0) == 0){
headsetConnected = false;
if (isPlaying()){
stopStreaming();
}
} else if (!headsetConnected && intent.getIntExtra("state", 0) == 1){
headsetConnected = true;
}
}
}

关于android - Activity 开始时收到 Intent.ACTION_HEADSET_PLUG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com