0

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

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

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

广播接收器是这样的:

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));
    }
}

我希望活动通过显式调用活动的意图接收 keyEvent 的操作和 keyCode。

有没有办法可以重用或克隆原始广播意图,在将其发送到 Activity 之前尽可能少地对其进行修改?或者是否有类似的替代方法可以将信息传递给活动的整洁/良好实践方式?

我真正想做的是最大限度地提高灵活性,例如,如果以下任何一种情况(IMO)都不好:

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

我是否应该将动作、类别、数据和附加内容从第一个意图复制到第二个意图?还有其他我可以/应该复制的内容吗?

4

1 回答 1

0

尝试使用复制构造函数:

Intent activityIntent = new Intent(intent);
activityIntent.setClass(context, MainActivity.class);
context.startActivity(activityIntent);
于 2014-08-19T12:43:37.087 回答