从BroadcastReceiver发送活动意图

时间:2015-12-24 22:58:05

标签: android android-intent

我还有一个问题。我做了一些关于如何正确地将一个intent从BroadcastReceiver发送到一个活动的研究。每个人都建议做以下事情:

构造一个intent并使用接收器中提供的上下文来启动该intent。但是,在尝试这样做时,我总是会收到错误

AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

因此,当我搜索该错误时,人们似乎建议您要为意图添加特定标志。但即使有这个标志,我也会遇到同样的错误。任何帮助都会受到赞赏。

Intent intentMain = new Intent(context.getApplicationContext(), MainActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intentMain.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("com.hennessylabs.xxx.FROM", senderNum);
intent.putExtra("com.hennessylabs.xxx.MSG", message);
context.startActivity(intentMain);

2 个答案:

答案 0 :(得分:1)

Intent intent = new Intent(context,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

然后在清单文件中 在主要活动

launchmode= singleTask

或根据您的要求,您也可以使用其他一些组合

答案 1 :(得分:1)

您似乎正在尝试从BroadcastReceiver启动MainActivity.class。那样就好。虽然我不知道你为什么要在添加标志时提供的第2和第3行中做了什么。为什么不这样做:

intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

所以你的整个代码块应如下所示:

Intent intentMain = new Intent(context.getApplicationContext(), MainActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("com.hennessylabs.xxx.FROM", senderNum);
intent.putExtra("com.hennessylabs.xxx.MSG", message);
context.startActivity(intentMain);