从BroadcastReceiver收到时,在Intent中缺少Extras

时间:2011-02-03 02:36:55

标签: android android-intent broadcastreceiver extras

我有一个广播接收器,可以监听所有拨出的电话。在另一项活动中,我进行拨出电话。在我的BC中,我希望能够确定在活动中创建了哪些呼叫,因此我在拨打电话时使用putExtras()来放置标记字段。问题是,在BC的onReceive()中我根本看不到额外的数据字段(返回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?

2 个答案:

答案 0 :(得分:2)

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

  

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

Jason&amp; HellBoy建议,不要在makePhoneCall()中启动一个Activity,而是向BroadcastReceiver发送一个广播,然后广播会启动一个Activity(当然它只包含标记)...

答案 1 :(得分:1)

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

使用sendBroadcast(intent)发送BroadcastReceiver将接收的Intent。您当前正在使用startActivity,它需要启动具有特定Activity类的Intent。