Android - 如何从窗口小部件启动活动并返回主屏幕

时间:2010-09-14 17:01:53

标签: android widget

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

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);

1 个答案:

答案 0 :(得分: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>元素设置的包名称。