5

在我的应用程序中,我在 aBroadcastReceiveronCreate()方法中注册 a Service

registerReceiver(receiver, newIntentFilter(myAction));

BroadcastReceiver现在我需要在每次发生时从新注册的活动开始onReceive(Context context, Intent intent)

Intent i = new Intent(context,MyClass.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

“上下文”是Context已传递给我的BroadcastReceiver. 这成功地工作并启动了Activity. Activity这是BraodcastReceiver从 a开始的正确和可靠的方法Service吗?因为有很多是为了得到Context, like getApplicationContext()orgetApplication()等​​。

在我的情况下,使用Contextwhich 已传递给我BroadcastReceiver的正确方式?

4

2 回答 2

3

可以使用“startActivity()”函数从服务启动活动。

尝试这样的事情:

public void startAct() {
    Intent i = new Intent();
    i.setClass(this, MyActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
}

并在您的BroadcastReceiver.

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

希望能帮助到你。

于 2013-10-10T22:14:22.743 回答
2

答案是“是”。您可以使用Context作为参数传递的那个onReceive()来启动一个活动。您还可以使用应用程序的上下文,您可以像这样获得:

context.getApplicationContext().startActivity(i);

没什么区别。两者都会起作用。

于 2013-10-15T14:47:45.130 回答