如何从服务启动活动?

时间:2010-08-11 07:02:43

标签: android

是否可以从服务启动活动?如果是的话,我们怎样才能做到这一点?

4 个答案:

答案 0 :(得分:70)

android.app.Serviceandroid.app.Context的后代,因此您可以直接使用startActivity。但是,由于您在任何活动之外启动此操作,因此需要在意图上设置FLAG_ACTIVITY_NEW_TASK标记。

例如:

Intent i = new Intent();
i.setClass(this, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

this是您的服务。

答案 1 :(得分:20)

即使框架允许您从服务启动活动,它也可能不是一个合适的解决方案。原因是服务任务可能或可能不是服务希望与用户交互时用户的焦点。中断用户当前正在做的事情被认为是糟糕的设计形式,尤其是应该在后台运行的东西。

因此,您应该考虑使用Notification with Notification Service,当用户决定调查时,它带有PendingIntent以启动所需的Activity。把它想象为延迟满足。

答案 2 :(得分:7)

我从服务启动活动时遇到问题,原因是缺少FLAG_ACTIVITY_NEW_TASK意图标记。

答案 3 :(得分:7)

这肯定会解决您的问题

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(this, TaxiPlexer.class);
intent.setComponent(cn);
startActivity(intent);