添加额外内容到已被“主页”按钮暂停的应用程序的Intent

时间:2014-01-29 07:58:43

标签: android android-intent android-widget widget android-activity

我有一个主应用程序和主屏幕小部件,可以启动该应用程序。 Widget为Intent添加了一些额外内容,将初始数据传递给应用程序。

Bundle extras = new Bundle();
extras.putString(AppWidgetConfigureActivity.EXTRA_ITEM, modeName);              

Intent modeIntent = context.getPackageManager().getLaunchIntentForPackage("com.my.app");

modeIntent.putExtras(extras);
modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 
context.startActivity(modeIntent);

在该应用程序的OnCreate方法中,我得到了这些额外内容:

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
String mode = intent.getStringExtra(EXTRA_ITEM);
...
}

如果按下“返回”按钮未启动或停止应用程序,则一切正常。 但是如果应用程序已被Home按钮暂停,它会从我的小部件中重新启动,使用旧的附加功能,它从onResume方法开始,而不是从onCreate开始(这是显而易见的事实),此时活动的Intent有旧的附加功能但不是我的附加功能从小部件中放入Intent。

如何将小部件中的额外内容传递给已被“主页”按钮暂停的应用程序?

2 个答案:

答案 0 :(得分:0)

我不太确定你想要什么,但让我试试.. 您可以使用getIntent()获取Intent中的onResume(),但我不确定您是否仍然可以在那里获取额外内容。
但是,您可以保存onCreate()方法中的额外内容,并在onResume()中设置应用内容,如果您必须重新创建内容。
另请查看onSaveInstanceState()onRestoreInstanceState()

String mode;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = this.getIntent();
    mode = intent.getStringExtra(EXTRA_ITEM);
    ...
}

@Override
public void onResume() {
    setMode(mode);
}

答案 1 :(得分:0)

我找到了解决方案! 你只需要向Intent添加一个标志。

modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

此标志(FLAG_ACTIVITY_CLEAR_TOP)清除当前任务堆栈,并在onResume回调中显示新的Intent附加内容。