在Android中响应耳机上的媒体按钮
我正在开发一个应用程序,它需要对耳机上的按键做出响应。我一直在学习MediaSession和相关课程,并试图用它来回应这些按钮的按下,只需显示一个祝酒词,显示按下了什么按钮。据我所知,MediaSession.Callback根本没有被调用,我很难理解为什么。在阅读了无休止的问答和其他地方之后,从我所能看出,我所做的正是其他人成功完成的事情。 我尝试过注册广播接收机,使用各种意图,简单的按键代码。。。似乎什么都不管用。甚至从MediaSession切换到MediaSessionCompat也没有效果。我相信有一些东西需要实现,允许android向我的应用程序发送媒体通知,但我在上面找不到任何东西,所以我甚至不确定是否需要这样做。 感谢您的帮助,并提前表示感谢 我的实施至今在Android中响应耳机上的媒体按钮,android,android-10.0,android-mediasession,Android,Android 10.0,Android Mediasession,我正在开发一个应用程序,它需要对耳机上的按键做出响应。我一直在学习MediaSession和相关课程,并试图用它来回应这些按钮的按下,只需显示一个祝酒词,显示按下了什么按钮。据我所知,MediaSession.Callback根本没有被调用,我很难理解为什么。在阅读了无休止的问答和其他地方之后,从我所能看出,我所做的正是其他人成功完成的事情。 我尝试过注册广播接收机,使用各种意图,简单的按键代码。。。似乎什么都不管用。甚至从MediaSession切换到MediaSessionCompat也没有
public class MainActivity extends AppCompatActivity
{
MediaSessionCompat m_MediaSession;
final MediaSessionCompat.Callback m_MediaCallback = new MediaSessionCompat.Callback()
{
@Override
public boolean onMediaButtonEvent(@NonNull Intent mediaButtonIntent)
{
Toast.makeText(MainActivity.this, "media button pressed", Toast.LENGTH_SHORT).show();
return super.onMediaButtonEvent(mediaButtonIntent);
}
@Override
public void onPlay()
{
Toast.makeText(MainActivity.this, "play button pressed", Toast.LENGTH_SHORT).show();
}
@Override
public void onPause()
{
Toast.makeText(MainActivity.this, "pause button pressed", Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
m_MediaSession = new MediaSessionCompat(getApplicationContext(), "MediaSessionTag");
m_MediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
m_MediaSession.setCallback(m_MediaCallback);
PlaybackStateCompat.Builder builder = new PlaybackStateCompat.Builder();
builder.setActions(PlaybackStateCompat.ACTION_PLAY |
PlaybackStateCompat.ACTION_PAUSE |
PlaybackStateCompat.ACTION_PLAY_PAUSE |
PlaybackStateCompat.ACTION_SKIP_TO_NEXT |
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackStateCompat.STATE_NONE, 0, (float) 1.0);
m_MediaSession.setPlaybackState(builder.build());
m_MediaSession.setActive(true);
}
@Override
public void onDestroy()
{
m_MediaSession.release();
super.onDestroy();
}
}