我有以下代码来捕捉耳机中的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);
}
答案 0 :(得分:0)
我已经在事件中使用getKeycode()来解决问题。
按下按钮按钮所需的KeyCode为79.两个耳机在Android 4.1,5.0上测试时都会发送此密钥79.
然而,Android 7.1在拥有自己的Android Mod的小米手机上运行。我认为这是罪魁祸首,它将三星耳机的按键识别为键码88而不是79.所以它是手机特定的问题,而不是Android问题。