如何从服务启动活动?

Spu*_*aba 38 android

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

Mar*_*Gil 71

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

例如:

Intent i = new Intent();
i.setClass(this, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

this你的服务在哪里


小智 20

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

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

  • 接听电话是一个完美的例子...您认为您不应该直接接听电话,而应该拉下通知区域,单击电话应用程序通知,然后选择接听,发送不接听的原因接听电话或忽略来电?这对用户来说又如何更加方便呢? (2认同)

小智 7

我从服务启动活动时遇到问题,这是由于缺少FLAG_ACTIVITY_NEW_TASK意图标志.


Ron*_*ony 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);
Run Code Online (Sandbox Code Playgroud)