也许我会以错误的方式解决这个问题,但我想在我自己的应用程序中响应我的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}的额外内容}} 到下一个。我想将这两个分开并且易于访问。
答案 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;
}
}