4

在我的应用程序中,我在ServiceonCreate()方法中注册了BroadcastReceiver从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); 

的“上下文”,其已经被传递给我的BroadcastReceiverContext。那成功地工作并且开始了Activity。这是从Service开始在BraodcastReceiver内的Activity的正确和可靠的方法吗?因为有很多是为获取Context,像getApplicationContext()getApplication()的等

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

+0

'BroadcastReceiver'没有'Context'。当调用'BroadcastReceiver.onReceive()'时它传递了一个上下文,但它没有自己的一个,并且通过继承不是'Context'。 – Prmths

+0

@Prmths是的,我想说同样的话,对不起如果我不清楚! – Soheil

回答

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'的可靠方法。我的代码和你的代码没有区别,都使用'Service'的'Context'来提交'Intent'和'startActivity()',但是还有其他的方法,例如'getBaseContext()'等。我们的方式是否正确? – Soheil

+1

我这么认为,之前我用过很多次,一切正常,工作正常。 – Bardo91

2

答案是“是”。您可以将Context作为参数传递给onReceive()以启动一项活动。您也可以使用应用程序的上下文,您可以这样得到:

context.getApplicationContext().startActivity(i); 

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