Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 向已通过主页按钮暂停的应用程序的目的添加额外内容_Android_Android Intent_Android Widget_Widget_Android Activity - Fatal编程技术网

Android 向已通过主页按钮暂停的应用程序的目的添加额外内容

Android 向已通过主页按钮暂停的应用程序的目的添加额外内容,android,android-intent,android-widget,widget,android-activity,Android,Android Intent,Android Widget,Widget,Android Activity,我有一个主应用程序和主屏幕小部件,可以启动该应用程序。 这个小部件为将初始数据传递给应用程序的意图添加了一些额外的内容 Bundle extras = new Bundle(); extras.putString(AppWidgetConfigureActivity.EXTRA_ITEM, modeName); Intent modeIntent = context.getPackageManager().getLaunchIntentForPackage("com

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

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(这是显而易见的事实)开始,此时活动的意图有旧的附加程序,但不是我从小部件中放入的附加程序


如何将附加功能从小部件传递到已通过“主页”按钮暂停的应用程序?

我不太确定您想要什么,但让我试试。。 您可以使用
getIntent()
onResume()
中获取
Intent
,但我不确定您是否仍然可以在那里获取额外信息
但是,如果必须重新创建某些内容,您只需保存在
onCreate()
方法中获得的额外内容,并在
onResume()中设置应用程序的内容。
还要看一下
onSaveInstanceState()
onRestoreInstanceState()

我找到了解决办法! 您只需在Intent中再添加一个标志

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

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

如果要在onCreate中再过一次,必须销毁该活动。onResume不允许进行意图捕获,因为这是一个回调,用于恢复刚刚创建并使用了意图的内容。如果您想重新加载活动,可以在返回时尝试使用“this.finish”否,我不想破坏活动或以某种方式干扰应用程序的标准工作流。我想停留在普通android的工作流程和界面上。让我更直接地解释一下我的目标:第一次小部件用一些额外的东西运行应用程序。调用应用程序启动和onCreate方法。在这一点上,我从意图中得到了我所期望的额外的东西。然后我按下Home按钮,应用程序暂停(但未销毁)。接下来,我使用widget使用一些新的附加组件再次启动该应用程序。调用应用程序运行和onResume方法。在这一点上,我试图从Intent中获得新的额外功能,但我第一次从widget中获得了旧的额外功能。这是正确的,您最初创建的应用程序活动不会被破坏。不是通过home按钮、Device sleep或再次启动活动。请尝试更准确地说:这是正确的,您首先创建的应用程序活动不会被破坏。(不是通过主页按钮、设备睡眠或再次启动活动)。。。如果您使用
startActivity()
从您的小部件再次启动它,您将获得此活动的第二个实例,第一个实例不会被销毁,并且仍将在堆栈上。。。因此,在再次启动之前,您可能应该杀掉旧的应用程序-可能使用类似于
clean_top
reorder_to_frot
的标志,或者其他方式。我也面临同样的问题,但在我的情况下,应用程序使用home按钮暂停,我正在通过小部件配置活动再次调用应用程序,但上述解决方案对我不起作用
modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);