在另一个 Intent 中发送 Intent

Posted

技术标签:

【中文标题】在另一个 Intent 中发送 Intent【英文标题】:Sending Intent inside of another Intent 【发布时间】:2012-11-03 02:37:16 【问题描述】:

也许我的做法是错误的,但我想在我自己的应用程序中响应我的 android AppWidget 的点击事件并启动一个 Activity。在我设置PendingIntent 时,我还有另一个Intent,我想在单击时启动它。我的onStartCommand 使用这一行:

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT);

当我打电话给setOnClickPendingIntent 时,我之前有这行:

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent);

因此,即使mLaunchIntent 在两行中都是有效的Intent,但第一行缺少大量数据。然后调用startActivity 失败,因为Intent 无效。

我想知道是否有可能以及如何在不严格调用putExtras 的情况下将Intent 发送到另一个Intent 内部,因为该方法简单地将一个Intent 的附加内容添加到下一个Intent。我想将这两个分开并易于访问。

【问题讨论】:

【参考方案1】:

我真的想通了,解决方案很简单。 mLaunchIntent 不应转换为 Parcelable,否则数据会丢失。

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent);

这就是我通过另一个Intent 发送Intent 所需的全部内容。

【讨论】:

应该是Intent.EXTRA_INTENT 而不是Widget.EXTRA_INTENT 你能告诉我,如何检索意图并传递给意图对象【参考方案2】:

您可以通过以下方式将 Intent 放入 Intent:

Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_INTENT, new Intent());

要从 Intent 中检索 Intent(从 Activity 中),您可以执行以下操作:

Intent intent = getIntent().getParcelableExtra(Intent.EXTRA_INTENT);

【讨论】:

【参考方案3】:

你不能使用service 来解析 Intent 吗?

【讨论】:

我正在使用一个服务,但该服务被一个 Intent 调用,在本例中为 mSendingIntent。我需要在该 Intent 旁边传递mLaunchIntent,以便点击事件随后启动一个 Activity。【参考方案4】:

您可以通过多种方式将意图/对象从源传递到目标,反之亦然。一种不使用捆绑包或附加功能的方法是使用带有变量(getter 和 setter)的常用类方法。使用方法传递对象。另一种方法是使用类变量。例如:

public class ClassB  extends Activity
    public static Object myObject;
    ...


public class ClassA extends Activity
    ...
    @override
    protected void onCreate(Bundle savedInstanceState)
        Object myObject = ClassB.myObject;
    

【讨论】:

这是...一种解决方案。但由于许多问题,这在我的情况下失败了。其一,如果用户依次单击两个小部件会怎样。我不想修改全局变量或必须设置某种全局队列。此外,Service 和 BroadcastReceiver 在不同的线程上运行。竞争条件使这是一个非常棘手的解决方案。

以上是关于在另一个 Intent 中发送 Intent的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的相机在另一个活动开始后停止预览?

隐式Intent发送前需要先检验

PendingIntent 不发送 Intent 额外内容

android开发中service如何接收activity用intent发送来的数据

获取 ImageView 的图像并将其发送到带有 Intent 的活动

使用 Intent.putExtra 发送数组