一种方法是使用onkeydown,但是我想捕获KEYCODE_HEADSETHOOK,即使该应用程序处于后台(并使用Service类)。所以我不会使用这种方法。
我遵循的逻辑是,我创建了MediaSession对象,因为这是Android上的最新MediaSession,所以当Android检测到KEYCODE_HEADSETHOOK事件时,应调用回调函数。
我遵循了网上的示例,尝试了这段代码,但这根本行不通。该应用程序处于前台状态,并且从未触发过Log.i行。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sol2();
}
void sol2() {
MediaSession audioSession = new MediaSession(getApplicationContext(), "ray");
audioSession.setCallback(new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
String intentAction = mediaButtonIntent.getAction();
Log.i("ray" , "hi");
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
}
return false;
}
});
PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY_PAUSE)
.setState(PlaybackState.STATE_PLAYING, 0, 0, 0)
.build();
audioSession.setPlaybackState(state);
audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
audioSession.setActive(true);
}
}