我有一个小部件,当点击时会打开与小部件相同的应用程序的活动。当通过按钮关闭/关闭活动时,如果应用程序先前打开/在内存中,用户将看到完整的应用程序窗口。有没有办法让活动完成并返回到主屏幕,而不是现有的应用实例?
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);
答案 0 :(得分:4)
请查看UI指南"Notifications should let the user easily get back to the previous activity"以了解类似情况以及“应用程序基础”框架主题的Activities and Tasks部分。
根据您的需要,您可以将意图标记FLAG_ACTIVITY_NEW_TASK
与为要单独打开的活动设置单独的亲和关系结合使用。您可以将清单中<activity>
元素的taskAffinity
属性设置为空字符串。如果您始终只将该活动与应用程序的其余部分分开使用,那么这只是一个很好的解决方案。
android:taskAffinity
活动具有亲和力的任务。具有相同亲和力的活动在概念上属于同一任务(从用户的角度来看属于相同的“应用程序”)。任务的亲和力由其根活动的亲和力决定。 关联性决定了两件事 - 活动重新定位的任务(参见
allowTaskReparenting
属性)以及在使用FLAG_ACTIVITY_NEW_TASK
标志启动时将容纳活动的任务。默认情况下,应用程序中的所有活动都具有相同的关联。您可以设置此属性以对它们进行不同的分组,甚至将在不同应用程序中定义的活动放在同一任务中。要指定活动与任何任务没有关联,请将其设置为空字符串。
如果未设置此属性,则活动将继承应用程序的关联集(请参阅
<application>
元素的taskAffinity
属性)。应用程序的默认关联的名称是由<manifest>
元素设置的包名称。