在另一个Intent中发送Intent

时间:2012-11-14 15:12:38

标签: android serialization android-intent android-widget

也许我会以错误的方式解决这个问题,但我想在我自己的应用程序中响应我的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无效。

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

4 个答案:

答案 0 :(得分:10)

我实际上已经弄明白了,解决方案非常简单。不应将mLaunchIntent强制转换为Parcelable,否则数据会丢失。

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent);

这就是我需要通过另一个Intent发送Intent

答案 1 :(得分:2)

您可以使用以下方法将意图放入意图:

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

要从意图中检索意图(从活动中),可以执行以下操作:

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

答案 2 :(得分:1)

你不能使用service来解析意图吗?

答案 3 :(得分:1)

您可以通过不同的方式将意图/对象从源传递到目标,反之亦然。在不使用bundle或extras的情况下执行此操作的一种方法是使用带有变量(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;
    }
}