Как передать дополнения в BroadcastReceiver

У меня проблема с передачей дополнений на звонки и их отловом.

Чтобы было понятнее, что я собираюсь сделать:

Начните звонок и установите дополнительные услуги для этого намерения. Вот как выглядит мой текущий код для этого:

Intent dialIntent=new Intent(Intent.ACTION_CALL, Uri.parse("tel:" +  this.number));
dialIntent.putExtra("foo", true);
startActivity(dialIntent);

Я реализую BroadcastReceiver, чтобы «перехватить» вызов и хочу получить доступ к дополнительным параметрам, которые я установил при запуске действия. Это то, что у меня есть в моем манифесте:

<receiver android:name=".CallReceiver">
  <intent-filter android:priority="1">
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
  </intent-filter>
</receiver>

К сожалению, намерение, которое передается моему CallReceiver, является намерением NEW_OUTGOING_CALL.

Я надеюсь, что ясно, что я хочу сделать, и я надеюсь, что это возможно.

Заранее спасибо.


person Zoran Zaric    schedule 08.03.2011    source источник


Ответы (1)


Вместо того, чтобы использовать здесь BroadcastReciever, вы на самом деле хотите сделать другое действие «дозвонщика по умолчанию», но оно будет иметь более высокий приоритет, чтобы гарантировать, что оно будет запущено до родного приложения дозвона. Затем вы можете изменить намерение следующим образом:

public void onCreate(Bundle b){
    Intent i = getIntent();
    //alter i here 
    startNextMatchingActivity(i);
}

надеюсь это поможет!

person Nathan Schwermann    schedule 08.03.2011
comment
я добавил эту строку над строкой действия NEW_OUTGOING_CALL: <action android:name="android.intent.action.CALL" /> но она все еще не работает, я получаю только действие NEW_OUTGOING_CALL - person Zoran Zaric; 09.03.2011
comment
@Zoran Zaric попробуй еще добавить <category android:name="android.intent.category.DEFAULT"/> - person Nathan Schwermann; 09.03.2011
comment
@ Зоран Зарик Прости, я не уверен, о чем я думал. Получатель не уловит это, потому что вы вызываете startActivity, а не sendBroadcast. Чего вы пытаетесь добиться здесь? Вы хотите перехватывать все звонки или только звонки из вашего приложения? - person Nathan Schwermann; 09.03.2011
comment
@schwiz оба, сначала я хочу перехватить все звонки, что-то с ними сделать и сделать новый. Звонки, которые я (приложение) делаю, должны быть переданы. - person Zoran Zaric; 09.03.2011
comment
@ Зоран Зарик Я не уверен, что вы имеете в виду, говоря, что звонки, которые вы делаете, должны быть пропущены. Но то, что вы хотите сделать для перехвата вызовов, — это создать действие без пользовательского интерфейса, но с фильтром намерений с вызовом действия. Также установите его приоритет на чрезвычайно высокое число, например, max_int, чтобы вы знали, что он будет активирован перед родным номеронабирателем. - person Nathan Schwermann; 09.03.2011
comment
@schwiz хорошо, я постараюсь объяснить, что я пытаюсь сделать. 1) пользователь звонит с помощью обычного телефонного приложения 2) мой BroadcastReceiver перехватывает этот вызов и решает 3a) передать вызов номеронабирателю по умолчанию или 3b) изменить номер, сделать еще кое-что и передать его номеронабирателю по умолчанию. Я надеюсь, что это проясняет это. Как мне передать намерение вызова в собственный номеронабиратель при наличии действия с фильтром намерений для вызова действия с очень высоким приоритетом? - person Zoran Zaric; 09.03.2011
comment
@ Зоран Зарик, ааа, хорошо, я отредактировал свой первоначальный ответ, спасибо за разъяснения. - person Nathan Schwermann; 10.03.2011
comment
@schwiz хорошо, я пробовал, но это не работает. Я добавил этот фильтр намерений в свою активность: <intent-filter android:priority="900001"> <action android:name="android.intent.action.CALL" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> и удалил BroadcastReceiver, но теперь, когда я звоню, родное приложение для набора номера получает вызов. большое спасибо за ваше терпение! - person Zoran Zaric; 10.03.2011
comment
@Zoran Zaric Я в растерянности, попробуйте использовать инструмент apk code.google.com/p /android-apktool, чтобы прочитать манифест номеронабирателя и убедиться, что вы выбрали более высокий int, и, черт возьми, попробуйте установить приоритет на 0, может быть, я получил его наоборот... - person Nathan Schwermann; 11.03.2011
comment
@schwiz Приложение «Телефон» имеет открытый исходный код. Это манифест: gist.github.com/70dd9794baec9fd689f8 Думаю, строки 129-139 мне интересны. и в значительной степени, как я это было. Мне пришлось добавить <data android:scheme="tel" /> в фильтр намерений, теперь он работает! большое спасибо!!! - person Zoran Zaric; 13.03.2011