android - 为什么 ACTION_MEDIA_BUTTON 无法处理事件?

标签 android broadcastreceiver android-audiomanager

按照有关如何 use hardware playback control keys to control audio playback 的培训部分,我创建了一个监听器类:

public class RemoteControlReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
            KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
            Log.e(TAG, "ACTION_MEDIA_BUTTON"); 

            int keycode = event.getKeyCode();
            switch (keycode)
            {
                case KeyEvent.KEYCODE_MEDIA_NEXT:
                    Log.e(TAG, "KEYCODE_MEDIA_NEXT"); 
                    break;
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                    Log.e(TAG, "KEYCODE_MEDIA_PLAY_PAUSE"); 
                    break;
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                    Log.e(TAG, "KEYCODE_MEDIA_PREVIOUS"); 
                    break;
                default:
            }

            if (/*KeyEvent.KEYCODE_MEDIA_PLAY*/ 126 == event.getKeyCode()) { // KEYCODE_MEDIA_PLAY undefined for API < 11
                Log.e(TAG, "KEYCODE_MEDIA_PLAY"); 
            }           
        }
    }
}

在 Activity 的 onCreate() 中注册它:

private AudioManager mAudioManager;
private ComponentName mRemoteControlReceiver;
...
...
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mRemoteControlReceiver = new ComponentName(this, RemoteControlReceiver.class);
mAudioManager.registerMediaButtonEventReceiver(mRemoteControlReceiver);

并将其注册到 list 中:

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

但是当按下这些按钮中的任何一个时,不会导致任何日志消息出现在 LogCat 上! (无论是否在播放我的媒体时被按下)

我的代码似乎拦截了来自其他媒体播放器的这些事件,但为什么我看不到任何 Log.e() 消息?我错过了什么?

顺便说一句,当我按下这些按钮中的任何一个时,会出现以下消息:

W/KeyCharacterMap(19801): Can't open keycharmap file
W/KeyCharacterMap(19801): Error loading keycharmap file '/system/usr/keychars/h2w_headset.kcm.bin'. hw.keyboards.131075.devname='h2w headset'
W/KeyCharacterMap(19801): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

最佳答案

您碰巧使用 Library Project 来实现它吗?

如果是这样,您将 <receiver> 放在了哪个 list 中?在?库的还是应用程序的?

如果你放在图书馆的,它是行不通的。您必须将它放在应用程序的 list 中:

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

关于android - 为什么 ACTION_MEDIA_BUTTON 无法处理事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057291/

相关文章:

Android禁用按钮

android - 接收广播 Intent 时出错 { act=android.location.PROVIDERS_CHANGED flg=0x10 }

Android:如何检查手机音频输出?

android - "empty"布局中的 GestureDetector NullPointerException

android - 从 ContactProvider 的单个查询中获取联系人列表及其主要电子邮件和电话号码

android - 使用 Android 在 Realm 中存储空值

Android GCM(推送通知): device doesn't receive notification if application is stopped

android - 从拨号器打开 Android 应用程序

ionic-framework - 如何在 Cordova Media Plugin 中的另一个播放器中并行播放音频时停止音频

java - AudioManager 不工作 - 既不打开扬声器也不静音