为已被 Home 按钮暂停的应用程序的 Intent 添加额外内容
Posted
技术标签:
【中文标题】为已被 Home 按钮暂停的应用程序的 Intent 添加额外内容【英文标题】:Add extras to Intent of application which has been paused by Home button 【发布时间】:2014-02-20 21:51:41 【问题描述】:我有一个能够启动该应用程序的主应用程序和主屏幕小部件。 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。
如何将附加组件从小部件传递到已被 Home 按钮暂停的应用程序?
【问题讨论】:
如果你想在onCreate中传递另一个时间,你必须销毁活动。 onResume 不允许意图捕获,因为它是恢复刚刚创建并刚刚使用意图的内容的回调。如果您想重新加载活动,可以尝试在返回时使用“this.finish” 不,我不想破坏活动或以某种方式干扰应用程序的标准工作流程。我想留在常见的 android 工作流程和界面中。 【参考方案1】:我不太确定你想要什么,但让我试试..
您可以使用getIntent()
在onResume()
中获取Intent
,但我不确定您是否仍然可以在那里获取额外内容。
但是,如果您必须重新创建某些内容,您可以只保存在 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);
【讨论】:
让我更直接地解释我的目标:第一次小部件运行带有一些附加功能的应用程序。应用程序启动并调用 onCreate 方法。在这一点上,我从 Intent 中得到了我期望的确切额外内容。然后我按下主页按钮,应用程序暂停(但没有被破坏)。接下来,我使用小部件重新启动该应用程序,并添加一些新的附加功能。应用程序运行和 onResume 方法被调用。在这一点上,我尝试从 Intent 获取新的附加功能,但我得到了我第一次从小部件中放入 Intent 的旧附加功能。 这是正确的,您最初创建的应用程序活动不会被破坏。不是通过主页按钮,设备睡眠或重新开始活动。 试图更准确地说:这是正确的,您最初创建的应用程序活动不会被破坏。 (不是通过主页按钮、设备睡眠或再次启动活动)...如果您使用startActivity()
从您的小部件再次启动它,您将获得此活动的第二个实例,而第一个不会被销毁并且仍然会在堆栈上......所以你也许应该在重新开始之前杀死旧的 - 也许使用像clean_top
或reorder_to_frot
这样的标志或其他方式【参考方案2】:
我找到了解决办法! 您只需向 Intent 添加一个标志。
modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
此标志 (FLAG_ACTIVITY_CLEAR_TOP) 清除当前任务堆栈并在 onResume 回调中显示新 Intent 的附加内容。
【讨论】:
我也面临同样的问题,但在我的情况下,应用程序通过主页按钮暂停,我再次从小部件配置活动调用应用程序,但上述解决方案对我不起作用以上是关于为已被 Home 按钮暂停的应用程序的 Intent 添加额外内容的主要内容,如果未能解决你的问题,请参考以下文章
此帐户已被暂停。有关更多信息,请联系您的托管服务提供商 [关闭]