【问题标题】:Android MEDIA_BUTTON event not received when music app is playing播放音乐应用时未收到 Android MEDIA_BUTTON 事件
【发布时间】:2014-12-15 10:17:48
【问题描述】:

我的应用应该在蓝牙耳机上捕捉点击事件。它是 MEDIA_BUTTONS。 我使用广播接收器。通常它可以工作,但是当我在后台启动音乐应用程序时,音乐应用程序会窃取这些事件,并且我的 onReceive 方法不再被调用。

我所做的是: 1)我在清单中注册接收器:

<receiver android:name=".PlantronicsReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
    </receiver>

2) 我在活动中注册接收者

mAudioManager.registerMediaButtonEventReceiver(new ComponentName(this, PlantronicsReceiver.class));

您知道如何在音乐应用(例如 Google Play)打开的情况下接收媒体按钮事件吗?

谢谢!

【问题讨论】:

    标签: android broadcastreceiver keyevent audio-player android-audiomanager android-music-player


    【解决方案1】:

    查看此链接:http://developer.android.com/training/managing-audio/audio-focus.html

    首先你需要获得音频焦点,然后只有你可以捕捉 MEDIA_BUTTON 事件。 我有同样的问题,以上对我有用。

    关于我在 cmets 中提到的 Intent Action 的使用,您可以检查以下内容:

    IntentFilter musicPauseFilter = new IntentFilter(
                        "android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION");
    IntentFilter musicPlayFilter = new IntentFilter(
                        "android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION");
    
    registerReceiver(musicPlay, musicPlayFilter);
    registerReceiver(musicPause, musicPauseFilter);
    

    然后您可以简单地定义这些接收器并在它们内部做任何想做的事情:

        // Broadcast Receiver for Music play.
        private BroadcastReceiver musicPlay = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                Log.v("gaurav", "Music play started");
                }
        };
    
        // Broadcast Receiver for Music pause.
        private BroadcastReceiver musicPause = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                Log.v("gaurav", "Music paused");
                }
        };
    

    希望对你有帮助。

    【讨论】:

    • 是的,确实有效。非常感谢!但是有没有办法通过点击相同的 media_button 来管理然后播放音乐(暂停/播放等)?
    • 我使用以下操作:“android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION”和“android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION”。请检查这些是否适合您。我只在三星 Galaxy Note 2 上测试过。
    • 你能举个小例子吗?你是如何使用它们的?谢谢!
    • 看来这个解决方案对我有用,谢谢@gaurav jain
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多