启动活动并将其带到前面

时间:2014-03-28 09:00:59

标签: android android-intent service android-activity flags

我有一项服务,一旦完成任务,它就会启动从我的应用程序启动活动的意图。像这样:

Intent i = new Intent(MyService.this, MyActivityToBringToFront.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
//i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i); 

即使我的申请被关闭,该服务也可以运行。在这种情况下,我的应用程序关闭,我需要它将活动带到用户当前正在做的任何事情的前面。因此,如果用户在不同的应用程序中,我需要在前面弹出活动。这可能吗。没有任何标志有任何影响。基本上我需要它像系统电话应用程序。当您接到电话时,它总是将电话带到前面。我怎样才能做到这一点?谢谢!

4 个答案:

答案 0 :(得分:1)

首先,你需要在内存中保留上下文来制作意图。

辅助您需要一种可以每24小时重新获取一次上下文的机制,因为通常情境会在24小时内保持活动状态。

从服务启动活动:

Intent dialogIntent = new Intent(getBaseContext(), myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

来源:https://stackoverflow.com/a/3607934/2956344

将活动推到顶部添加

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

答案 1 :(得分:1)

Intent i = new Intent(MyService.this, MyActivityToBringToFront.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity( i);

API参考是

  

如果设置,则正在启动的活动已在运行中   当前任务,然后而不是启动它的新实例   活动,其上的所有其他活动将被关闭   这个意图将作为一个传递到(现在在顶部)旧活动   新的意图。

     

例如,考虑一个由活动组成的任务:A,B,C,D。   如果D调用带有解析为的Intent的startActivity()   活动B的组成部分,然后C和D将完成,B接收   给定的Intent,导致堆栈现在为:A,B。

     

上例中活动B的当前运行实例将会   要么接收你从这里开始的新意图   onNewIntent()方法,或者自己完成并重新使用new   意图。如果它已宣布其启动模式为"多个" (该   默认情况下,您没有设置FLAG_ACTIVITY_SINGLE_TOP   意图,然后它将完成并重新创建;所有其他发射   模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,那么此Intent将是   传递到当前实例的onNewIntent()。

     

此启动模式也可用于与之配合使用   FLAG_ACTIVITY_NEW_TASK:如果用于启动任务的根活动,   它会将任何当前正在运行的任务实例带到   前景,然后将其清除到其根状态。这是特别的   例如,从通知启动活动时很有用   管理器。

答案 2 :(得分:0)

Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction("android.intent.action.VIEW");

i.setComponent(ComponentName.unflattenFromString("com.example.package/com.example.package.activityName"));

startActivity(i);

答案 3 :(得分:0)

从服务中启动活动并不总是一个好主意。您可能想要使用通知。如果用户点击通知,那就是您显示活动的时间。