- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图在耳机拔下时暂停正在播放的音乐。
我创建了一个 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/
我有自己的 BroadcastReceiver 实例用于 Intent.ACTION_HEADSET_PLUG 操作。从实际物理拔出耳机到通知我的 BroadcastReceiver 之间大约有 1-
我正在使用 list 文件为 ACTION_HEADSET_PLUG 创建广播接收器。但是当耳机连接/断开时我无法收到广播,为了能够接收 ACTION_HEADSET_PLUG 广播 Intent ,
public PluginResult execute(String action, JSONArray args, String callbackId) { try {
因此,为 ACTION_HEADSET_PLUG 注册广播接收器的技巧实际上是 processing the plug in/out events现在已经很清楚了。 但是...我的应用程序需要在 on
我想在插入耳机后显示通知,并在拔下耳机后隐藏它。因此,我在 BroadCastReceiver 中注册了 ACTION_HEADSET_PLUG Intent Listener,它在 BOOT_COM
我试过这些手机:Motorolla Backflip 1.5、Nexus One 2.1 基本上我注册 BroadcastReceiver 以获得 ACTION_HEADSET_PLUG 广播并查看
我在 AndroidManifest.xml 中声明了一个 BroadcsastReceiver(Action_headset_plug) 并定义了一个 BroadcsastReceiver 实现 B
我试图在耳机拔下时暂停正在播放的音乐。 我创建了一个 BroadcastReceiver,用于监听 ACTION_HEADSET_PLUG Intent 并在 state extra 为 0(表示未插
我正在使用 BroadcastReceiver 来了解耳机是否已插入设备,但在任何情况下“状态” Intent 都会立即返回 1(已插入)。 这是我的代码: public class Class {
我是一名优秀的程序员,十分优秀!