在另一个 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的主要内容,如果未能解决你的问题,请参考以下文章
android开发中service如何接收activity用intent发送来的数据