在我的应用中,我在BroadcastReceiver
的{{1}}方法中注册onCreate()
。
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
的正确可靠方式吗?因为获取Service
有很多内容,例如Context
或getApplicationContext()
等等。
在我的情况下,是否正在使用以getApplication()
正确方式传递的Context
?
答案 0 :(得分: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
标记。
希望它有所帮助。
答案 1 :(得分:2)
答案是肯定的。您可以使用作为Context
参数传递的onReceive()
来启动活动。您还可以使用应用程序的上下文,如下所示:
context.getApplicationContext().startActivity(i);
没有区别。两者都有效。