【问题标题】:Headphone Jack Listener Android耳机插孔监听器 Android
【发布时间】:2012-04-02 23:46:27
【问题描述】:

有谁知道我如何检测设备上的耳机插孔是否在 Android 上拔下?我有一个音乐播放器,拔下耳机时我需要暂停音乐。我发现最接近的是使用AudioManager。这是正确的方向吗?

【问题讨论】:

  • 这是一个很好的 Android MediaPlayer 实现@GitHub。它与MediaSessionCompatHeadsetListener 集成在一起——BroadcastReceiver 的实现在耳机断开连接时暂停播放。此外,它还通过AudioManager 处理音频焦点。

标签: java android audio media-player android-audiomanager


【解决方案1】:

这就是我最终做的:

private class NoisyAudioStreamReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
            pause();
        }
    }
}

private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);

private void startPlayback() {
    registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);
}

private void stopPlayback() {
    unregisterReceiver(myNoisyAudioStreamReceiver);
}

我在这个链接找到了答案:http://developer.android.com/training/managing-audio/audio-output.html

【讨论】:

  • 虽然我没有关于如何做的完整细节,但我相信你可以在类似的东西中使用“ACTION_HEADSET_PLUG”:IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); HeadsetStateReceiver 接收器 = 新的耳机状态接收器(); registerReceiver(this.toggleDeviceConnectionState(), receiverFilter);
  • @shim 只需检查 Intent(developer.android.com/reference/android/content/…) 的文档,您说得对:是的,存在 Intent Filter,但从 API21+ 开始,他们建议您改用 AudioManager。我认为原因是因为 BECOMING_NOISY 还考虑了其​​他类型的音频输出设备(例如蓝牙耳机),例如如果蓝牙耳机断开连接,它也应该进行广播。我现在正在尝试,但为了向后兼容,我想这两种方法都需要实现......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 2014-09-06
  • 2012-04-26
  • 2011-11-03
  • 2012-05-02
  • 2023-03-11
相关资源
最近更新 更多