用于检测ACTION_MEDIA_BUTTON的MediaSession不起作用

时间:2019-07-05 15:27:16

标签: java android

一种方法是使用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);

}

}

0 个答案:

没有答案