从 BroadcastReceiver 启动 Activity

Soh*_*eil 5 android broadcastreceiver android-service android-activity

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

registerReceiver(receiver, newIntentFilter(myAction));
Run Code Online (Sandbox Code Playgroud)

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

Intent i = new Intent(context,MyClass.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

“上下文”是Context已传递给我的BroadcastReceiver. 这成功地工作并启动了Activity. 这是从 a开始Activity内部 a的正确和可靠的方法吗?因为有很多是为了得到、喜欢或等。BraodcastReceiverServiceContextgetApplicationContext()getApplication()

在我的情况下,使用Context传递给我BroadcastReceiver的方法是否正确?

Bar*_*o91 3

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

尝试这样的事情:

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

并调用您的BroadcastReceiver.

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

希望能帮助到你。