我在Android上使用Xamarin。我有一个广播接收器,它可以像这样抓住耳机上的按钮:
public class MyMediaButtonBroadcastReceiver : BroadcastReceiver
{
public string ComponentName { get { return Class.Name; } }
private MediaMetadataRetriever reader = new MediaMetadataRetriever();
public override void OnReceive(Context context, Intent intent)
{
if (intent.Action != Intent.ActionMediaButton)
return;
var keyEvent = (KeyEvent)intent.GetParcelableExtra(Intent.ExtraKeyEvent);
switch (keyEvent.KeyCode)
{
case Keycode.Headsethook:
break;
case Keycode.MediaPlay:
Toast.MakeText(Activity_Player.ctx, "PLAY", ToastLength.Short).Show();
break;
case Keycode.MediaPlayPause:
break;
case Keycode.MediaNext:
Toast.MakeText(Activity_Player.ctx, "NEXT", ToastLength.Short).Show();
break;
case Keycode.MediaPrevious:
Toast.MakeText(Activity_Player.ctx, "Prev", ToastLength.Short).Show();
break;
}
}
现在,一旦headsethook被触发,我需要发送另一个本地广播到我的主活动。
这意味着,我需要在我的主活动中一个侦听器函数,现在可以在主活动中触发函数。但是我还没有找到任何关于如何接收本地广播的方法,只有如何发送广播。接下来我可以尝试什么?
编辑
[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionMediaButton })]
public class MyMediaButtonBroadcastReceiver : BroadcastReceiver
{
public string ComponentName { get { return Class.Name; } }
public override void OnReceive(Context context, Intent intent)
{
if (intent.Action != Intent.ActionMediaButton)
return;
var keyEvent = (KeyEvent)intent.GetParcelableExtra(Intent.ExtraKeyEvent);
switch (keyEvent.KeyCode)
{
case Keycode.Headsethook:
Activity_Player.Instance.PlayOrPauseLogic();
break;
case Keycode.MediaPlay:
Toast.MakeText(Activity_Player.ctx, "PLAY", ToastLength.Short).Show();
Activity_Player.Instance.PlayOrPauseLogic();
break;
case Keycode.MediaPlayPause:
Activity_Player.Instance.PlayOrPauseLogic();
break;
case Keycode.MediaNext:
Toast.MakeText(Activity_Player.ctx, "NEXT", ToastLength.Short).Show();
if(Activity_Player.CurrentSongObject != null)
Activity_Player.Instance.ChooseRandomNewSongAndPlay(false);
break;
case Keycode.MediaPrevious:
Toast.MakeText(Activity_Player.ctx, "Prev", ToastLength.Short).Show();
if (Activity_Player.CurrentSongObject != null)
Activity_Player.mediaPlayer.SeekTo(0);
break;
}
}
}
1条答案
按热度按时间rbl8hiat1#
如何从本地广播管理器接收广播消息?
让我们假设您有一个名为ServiceBroadcastReceiver的
BroadcastReceiver
,它对Intent extra起作用。在这个例子中,如果我收到一个“播放”的意图额外的,我会做一些与该信息。将其作为Activity的内部类:
现在向接收器发送广播:
当“活动”正在运行时,您可以注册以接收以下广播:
在OnResume覆盖中,您可以创建/注册它:
在
OnPause
覆盖中,取消注册并清理: