我有以下代码来捕获耳机上的钩子按钮按下。这段代码适用于Android4.1、Android5.0和7.0
我有两个耳机,
第一个是一个简单的三星免提/耳机,它与一个旧的三星手机一起提供。它只有一个按钮。
第二个是带有免提麦克风的索尼耳机,它也只有一个按钮。
当插入Android4.1或Android5时,这两款耳机都可以识别OnPlay方法中的按钮按下(见下面的代码)。
然而,在Android7.1.2中,当我使用三星耳机时,当钩子按钮被按下时,onPlay方法不会被调用。
按下索尼头戴式耳机按钮会导致调用onPlay方法。
我添加了注释掉的代码,以查看应用程序是否正在接收MediaButton事件。如果我使用三星耳机并按下按钮,它会导致MediaButton事件,我使用onMediaButtonEvent对其进行了验证。
为什么这个mediabutton事件不能转换成onPlay --只有在Android7.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);
}
发布于 2018-05-14 06:18:35
我已经在事件上使用getKeycode()解决了这个问题。
按下挂钩按钮所需的KeyCode为79。当在Android 4.1,5.0上测试时,两个耳机都会发送此按键码79。
然而,Android 7.1是在小米手机上运行的,小米手机有自己的Android模块。我认为这就是罪魁祸首,它将三星耳机按下的按钮识别为键码88而不是79。所以这是一个特定于手机的问题,而不是Android的问题。
https://stackoverflow.com/questions/50314308
复制相似问题