【问题标题】:Missing Extras in Intent when received from a BroadcastReceiver从 BroadcastReceiver 接收时,Intent 中缺少 Extras
【发布时间】:2011-02-03 02:36:54
【问题描述】:

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

这里是相关的Activity代码:

@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 吗?

【问题讨论】:

    标签: android android-intent broadcastreceiver extras


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 广播接收器确实被调用,只是额外的不存在。据我所知,我必须使用 startactivity 拨打电话,不是吗?
      • “广播接收器确实被调用”,因为它可能已注册“呼出呼叫”。我的建议是您使用发送广播发送广播并从那里开始活动(即从 onReceive() 方法)。
      • 我有同样的问题你有解决办法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多