如何将广播Intent从BroadcastReceiver转发到应用程序的活动(将广播意图转换为显式意图)

时间:2014-08-19 12:19:14

标签: android android-intent broadcastreceiver android-broadcast explicit-intent

我想捕捉广播意图,然后将意图的详细信息转发给我的应用中的特定活动。

所以在我的清单文件中,我有这个:

<receiver android:name="uk.floriansystems.carplayer.MediaButtonReceiver">
    <intent-filter android:priority="999">
        <action android:name="android.intent.action.MEDIA_BUTTON"></action>
    </intent-filter>
</receiver>

BroadcastReceiver是这样的:

public class MediaButtonReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context, Intent intent) {

        KeyEvent keyEvent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        int keyEventKeyCode = keyEvent.getKeyCode();
        int keyEventAction = keyEvent.getAction();

        // I want to pass the above integers to my Activity, within the Intent
        // created below, in a tidy way:

        context.startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }
}

我希望活动通过显式调用活动的intent接收keyEvent的action和keyCode。

有没有办法可以重复使用或克隆原始广播意图,在将其发送到活动之前尽可能地将其修改为最低限度?或者是否有类似的替代方案可用于整洁/良好实践方式将信息转发给活动?

我真正想要做的是最大限度地提高灵活性,例如,如果其中任何一个(IMO)不好的话:

  1. 我为调用Activity而创建的Intent仅与Activity
  2. 兼容
  3. 处理意图的Activity中的代码仅与我的BroadcastReceiver
  4. 创建的意图兼容

    我是否应该将第一个意图的动作,类别,数据和附加内容复制到第二个意图?我能/应该复制其他任何内容吗?

1 个答案:

答案 0 :(得分:0)

尝试使用复制构造函数:

Intent activityIntent = new Intent(intent);
activityIntent.setClass(context, MainActivity.class);
context.startActivity(activityIntent);