Отсутствие дополнений в намерениях при получении от BroadcastReceiver - PullRequest
2 голосов
/ 03 февраля 2011

У меня есть приемник вещания, который прослушивает все исходящие звонки. В другом упражнении я совершаю исходящий вызов. В моем БК я хочу иметь возможность определить, какие вызовы были созданы в действии, поэтому я использую putExtras(), чтобы разместить поле маркера, когда я выполняю вызов. Проблема в том, что в onReceive() БК я не вижу дополнительного поля данных вообще (возвращает ноль).

Вот соответствующий код деятельности:

@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 ]

2 голосов
/ 22 февраля 2011

Официальная ссылка BroadcastReceiver API четко гласит (3-й абзац):

[...] механизм трансляции намерений полностью отделен от интентов, используемых для запуска операций. BroadcastReceiver не может увидеть или захватить Intents, используемый с startActivity (); [...]

Так, как предложили Jason & HellBoy, вместо запуска Activity в makePhoneCall (), вы отправляете Broadcast на ваш BroadcastReceiver, который, в свою очередь, запускает Activity (конечно, только если он содержит дополнительный маркер) ...

1 голос
/ 03 февраля 2011

Если вы добавите дополнительное ведение журнала, вы обнаружите, что BroadcastReceiver на самом деле вообще не вызывается?

Используйте sendBroadcast(intent) для отправки намерения, которое получит BroadcastReceiver.В настоящее время вы используете startActivity, который ожидает запуска Intent с определенным классом Activity.

...