如何从我的应用程序中判断它是否是从我的BroadcastReceiver启动的?

时间:2013-04-25 16:45:22

标签: android

如何从我的应用程序中判断它是否已从我的BroadcastReceiver启动/恢复?

我拦截拨出电话(android.intent.action.NEW_OUTGOING_CALL)。如果getString(Intent.EXTRA_PHONE_NUMBER)是一组数字之一,我会中止该调用(setResultData(null)),而不是startActivity我的应用,putExtra特定数字。如果(并且仅当)来自BroadcastReceiver,我希望能够提出一个基本上“使用此应用程序使用此号码/返回呼叫”的警报。但是,有时当我从其他地方返回应用程序时,即使我没有来自BroadcastReceiver,这个数字似乎仍然是意图的额外内容。我尝试检查FLAG_ACTIVITY_NEW_TASK标志,但有时候不会出现在BroadcastReceiver上。

1 个答案:

答案 0 :(得分:0)

正如您所说:您可以将任何参数传递给您的活动,表明它是从BroadcastReceiver调用的。但是,当恢复到您的活动时,某些代码可能会再次执行 - 可能会导致不必要的结果。当我曾经遇到类似的问题时,我存储/ 覆盖意图中的一些信息,例如

myActivity.getIntent().putExtra("phoneNumber", "nil");

对我来说有用的是,在完成ActionMode(比如说​​"nil"之后)处理后,我在意图中覆盖了额外的内容。所以后来我能够在onResume()中评估这些信息,例如:

@Override
public void onResume() {
    super.onResume();

    String phoneNumber = getIntent().getExtras().getString("phoneNumber")

    if ("nil".equals(PhoneNumber)) {
      ...
    }
}

做了一个小测试,效果很好。

希望这有帮助......干杯!