在另一个Intent中发送Intent

9
也许我做法有误,但我想在我的应用程序内响应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方法,因为该方法仅将一个Intent的附加项添加到下一个Intent中。我希望这两个可以分开并且容易访问。
4个回答

13

我其实已经想到了解决方法,它很简单。mLaunchIntent 不应该被强制转化为Parcelable,否则数据会丢失。

实际上,我找到了解决方法,它非常简单。mLaunchIntent不应该被转换为Parcelable,否则数据会丢失。

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent);

这就是我需要的全部,可以通过另一个Intent发送Intent


ه؛”该ن½؟用Intent.EXTRA_INTENT而ن¸چوک¯Widget.EXTRA_INTENTم€‚ - GreenROBO
1
请问如何获取意图并将其传递给意图对象? - JSONParser

7

您可以使用以下方式将Intent放入Intent中:

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

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

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

1

您可以使用不同的方法在源和目标之间传递意图/对象。一种不使用bundles或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;
    }
}

那是一个解决方案。但在我的情况下,由于许多问题,它失败了。首先,如果用户按顺序单击了两个小部件,怎么办?我不想修改全局变量或设置某种全局队列。此外,Service和BroadcastReceiver在不同的线程上运行。竞争条件使这成为一个非常棘手的解决方案。 - Tom

1

你不能使用一个服务来解析Intent吗?


2
我正在使用一个Service,但是该Service会通过Intent被调用,这里是mSendingIntent。我需要在该Intent中传递mLaunchIntent,以便点击事件可以启动一个Activity。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接