从BroadcastReceiver启动Activity

5
在我的应用程序中,我在一个服务的onCreate()方法中注册了一个BroadcastReceiver
registerReceiver(receiver, newIntentFilter(myAction));

现在,每次发生onReceive(Context context, Intent intent)事件时,我需要从新注册的BroadcastReceiver启动一个活动:
Intent i = new Intent(context,MyClass.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

“上下文”是传递给我的“BroadcastReceiver”的“Context”。这已经成功地启动了“Activity”。在从“Service”中的“BroadcastReceiver”启动“Activity”方面,这是正确且可靠的方法吗?因为有很多获取“Context”的方法,例如“getApplicationContext()”或“getApplication()”等。
在我的情况下,是否使用传递给我的“BroadcastReceiver”的“Context”是正确的方法?

BroadcastReceiver没有自己的Context。当调用BroadcastReceiver.onReceive()时,会传递一个上下文,但它本身不具备上下文并且不通过继承成为Context - Prmths
@Prmths 是的,我想说的也是这个,如果我表达不清楚,对不起! - Soheil
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.Serviceandroid.app.Context 的后代,因此您可以直接使用 startActivity 方法。但是,由于您在任何活动之外启动此操作,因此需要在意图上设置 FLAG_ACTIVITY_NEW_TASK 标志。

希望这有所帮助。


1
我只想找到一种可靠的方式从 Service 中启动一个 Activity。我的代码与你的代码没有区别,都使用了 ServiceContext 来填充 Intent 并调用 startActivity() 方法,但是还有其他方法,例如使用 getBaseContext() 等。我们的方式是否正确? - Soheil
1
我认为是这样的,我之前使用过很多次,一切都运行良好。 - Bardo91

2
答案是“是”。您可以使用作为参数传递给onReceive()Context来启动活动。您也可以使用应用程序的上下文,方法如下:
context.getApplicationContext().startActivity(i);

没有区别。两者都可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接