2010-09-14 85 views
1

我有一个小部件,单击时会从小部件打开与应用程序相同的活动。当通过按钮关闭/解除活动时,如果应用程序先前打开/在内存中,用户将看到完整的应用程序窗口。有没有办法让活动完成并返回到主屏幕而不是现有的应用程序实例?Android - 如何从小部件启动活动并返回主屏幕

Intent i = new Intent(this,RateIt.class); 
i.putExtra("com.sporadicsoftware.NetQ.movie_id",aMovie.title_id); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 
        0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
      updateViews.setOnClickPendingIntent(R.id.movie_one_title, pendingIntent); 

回答

4

看一看在UI准则"Notifications should let the user easily get back to the previous activity"了类似的情况,以及在应用程序基础架构议题的Activities and Tasks部分。

根据您的需要,您可以将意图标记FLAG_ACTIVITY_NEW_TASK与为您想单独打开的活动设置单独的关联结合使用。您可以将清单中<activity>元素的taskAffinity属性设置为空字符串。如果您始终只与应用程序的其余部分分开使用此活动,这只是一个很好的解决方案。

documentation

android:taskAffinity

该活动具有亲和力的任务。具有相同亲和力的活动在概念上属于相同的任务(从用户的角度来看属于相同的“应用程序”)。任务的亲和力取决于其根活动的亲和力。 亲和性决定了两件事 - 活动被重新授予的任务(请参阅allowTaskReparenting属性)以及在使用FLAG_ACTIVITY_NEW_TASK标志启动时将包含该活动的任务。

默认情况下,应用程序中的所有活动都具有相同的关联性。您可以设置此属性以不同方式对它们进行分组,甚至可以将在不同应用程序中定义的活动放在同一任务中要指定该活动不具有任何任务的关联性,请将其设置为空字符串。

如果未设置此属性,则该活动会继承为应用程序设置的关联(请参阅<application>元素的taskAffinity属性)。应用程序的默认关联名称是由<manifest>元素设置的包名称。