我有一个广播接收器,可以监听所有拨出的电话。在另一项活动中,我进行拨出电话。在我的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?
答案 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。