Получатель звонка не получает дополнения от намерения телефона
У меня есть активность, которая делает звонок:
public void call(String number) {
Intent intent = new Intent("android.intent.action.CALL");
intent.setData(Uri.parse("tel:" + number));
intent.putExtra("MY_EXTRA", "Hello");
startActivity(intent);
finish();
}
Я настроил вещательный приемник для звонков:
public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Extra", intent.getStringExtra("MY_EXTRA", "Default"));
}
}
}
И зарегистрировал это:
<receiver android:name=".OutgoingCallReceiver">
<intent-filter android:priority="-1">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
Приемник вещания работает. Но независимо от того, получает ли он событие от номеронабирателя или от моей Активности, ничего лишнего.
Почему статисты не проходят?
3 ответа
Это не работает так. Вы не можете добавить произвольные дополнения к "ACTION_CALL" Intent
и ожидайте, что эти дополнения появятся в "NEW_OUTGOING_CALL" Intent
это трансляция. Вы не можете добавлять свои дополнения в трансляцию "NEW_OUTGOING_CALL". Intent
, Вы получаете только те дополнения, которые звонилка вкладывает в Intent
(как и номер телефона).
Отправленное вами намерение никогда не будет поймано вещателем. Это вызывает вызов, который отправляет свое собственное широковещательное намерение.
Звонящий не принимает во внимание любые другие дополнения, которые вы ему отправляете; он не знает, что с ними делать.
Вы можете попробовать использовать SharedPreferences
чтобы сохранить состояние между действием, отправляющим намерение, и BroadcastReciever.
Все вроде нормально, но как я вижу:
http://developer.android.com/reference/android/content/Intent.html
intent.getStringExtra("MY_EXTRA")
принимает один аргумент, нет значения по умолчанию, как для getIntExtra() и т.д...