MediaCompat - 挂钩按钮

时间:2018-05-13 08:41:05

标签: android

我有以下代码来捕捉耳机中的Hook按钮按下。此代码适用于Android 4.1,Android 5.0以及7.0

我有两个耳机,

第一个是一个简单的三星免提/耳机,配有一个旧的三星手机。它只有一个按钮。

第二个是带有免提麦克风的索尼耳机,它也只有一个按钮。

这些耳机在插入Android 4.1或Android 5时 - 按下按钮在OnPlay方法中识别(参见下面的代码)。

然而在Android 7.1.2中,当我使用Samsung Headset时,按下Hook按钮时不会调用onPlay方法。

按下Sony耳机按钮会调用onPlay方法。

我添加了注释掉的代码,以查看应用程序是否正在接收MediaButton事件。如果我使用三星耳机并按下按钮会导致MediaButton事件,我使用onMediaButtonEvent验证它。

为什么此媒体按钮事件未转换为onPlay - 仅适用于Android 7.1.2且仅使用该特定耳机。

我应该在活动中看到什么。

private void initMediaSessions()
{
    mSession = new MediaSessionCompat(getApplicationContext(), VoiceTicketService.class.getSimpleName());

    mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS);
    mSession.setMediaButtonReceiver(null);

    mStateBuilder = new PlaybackStateCompat.Builder()
            .setActions(PlaybackStateCompat.ACTION_PLAY);
    mSession.setPlaybackState(mStateBuilder.build());
    mSession.setCallback(new MediaSessionCompat.Callback()
                         {
                             //callback code is here.
                             @Override
                             public void onPlay()
                             {
                                 Log.d("onPlay", "Hook key  pressed UI is active");
                                 toggleRecogniserState();
                             }
                             @Override
                             public void onStop()
                             {
                                 Log.d("onStop", "Hook key  pressed UI is active");
                                 toggleRecogniserState();
                             }
                             @Override
                             public void onPause()
                             {
                                 Log.d("onPause", "Hook key  pressed UI is active");
                                 toggleRecogniserState();
                             }
                       /*      @Override
                             public boolean onMediaButtonEvent(Intent mediaButtonEvent)
                             {
                                 KeyEvent event = (KeyEvent)mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
                                 Log.d("onMediaButtonEvent ", "Hook key  pressed UI is active "+event.getAction());
                                 if(event.getAction()==0)
                                    toggleRecogniserState();
                                 return true;
                             }*/
                         }
    );
    mSession.setActive(true);
}

1 个答案:

答案 0 :(得分:0)

我已经在事件中使用getKeycode()来解决问题。

按下按钮按钮所需的KeyCode为79.两个耳机在Android 4.1,5.0上测试时都会发送此密钥79.

然而,Android 7.1在拥有自己的Android Mod的小米手机上运行。我认为这是罪魁祸首,它将三星耳机的按键识别为键码88而不是79.所以它是手机特定的问题,而不是Android问题。