2

我有一个广播接收器,它监听所有拨出电话。在另一项活动中,我拨打了电话。在我的 BC 中,我希望能够确定在活动中创建了哪些呼叫,因此我在putExtras()拨打电话时使用了一个标记字段。问题是,在onReceive()BC 中,我根本看不到额外的数据字段(返回 null)。

这是相关的活动代码:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        appGlobal gState = (appGlobal)getApplicationContext();
        dh = gState.getSqlDataHelper();
        Bundle extras = getIntent().getExtras(); 
        if(extras != null)
        {
            phoneNumber = extras.getString("number");
        }
        makePhoneCall();
        finish();
    }

private void makePhoneCall()
    {

        if (phoneNumber.length() < 1) {
            return;
        }
        String url = "tel:" + phoneNumber;
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
        intent.putExtra("number", "bla");

        startActivity(intent);
    }

这是相关的BC代码:

public class CallMeNotServiceCallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();

        if (intent.getStringExtra("number") != null)
        { Log.w("bla", "HAS KEY!!!"); }
...

这种情况是否需要 PendingIntent?

4

2 回答 2

2

官方BroadcastReceiver API 参考明确指出(第 3 段):

[...] Intent 广播机制与用于启动活动的 Intent 完全分开。BroadcastReceiver 无法查看或捕获与 startActivity() 一起使用的 Intent;[...]

因此,正如 Jason 和 HellBoy 所建议的那样,不要在 makePhoneCall() 中启动 Activity,而是向 BroadcastReceiver 发送一个广播,然后它会启动一个 Activity(当然,前提是它包含额外的标记)......

于 2011-02-22T12:59:12.603 回答
1

如果您添加额外的日志记录,您是否发现 BroadcastReceiver 实际上根本没有被调用?

用于sendBroadcast(intent)发送广播接收器将接收的意图。您当前正在使用startActivitywhich 期望具有特定 Activity 类的 Intent 启动。

于 2011-02-03T03:29:17.333 回答