我有一个主应用程序和主屏幕小部件,可以启动该应用程序。 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。
如何将小部件中的额外内容传递给已被“主页”按钮暂停的应用程序?
答案 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附加内容。