отмена исходящего вызова с помощью приложения для набора номера по умолчанию

#android #android-bluetooth

#Android #android-bluetooth

Вопрос:

У меня есть приложение, которое становится средством набора номера по умолчанию.

Он хорошо работает при входящих вызовах, отвечает и вешает трубку с помощью android.telecom классов

Теперь, что я пытаюсь сделать, это, когда телефонная трубка Bluetooth набирает номер, остановить этот набор и запустить whatsapp dial uri с тем же номером.

Есть идеи, как отменить вызов, который набирается через телефонную трубку?

Комментарии:

1. Для получения этого события необходимо использовать широковещательный приемник

2. и как мне отменить вызов, как только я его получу

Ответ №1:

Вы можете использовать TelecomManager класс для прерывания вызова.

 TelecomManager telecomManager = (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);

if (telecomManager != null) {
if(telecomManager .endCall())
Toast(mContext,"Call ended",Toast.LENGTH_SHORT).show();
else
Toast(mContext,"Failed to end the call",Toast.LENGTH_SHORT).show();
}
  

Вам нужно разрешение

 <uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
  

Разрешение получателя

  <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
  

Широковещательный приемник

 public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.d(OutgoingCallReceiver.class.getSimpleName(), intent.toString());
    Toast.makeText(context, "Outgoing call happening!", Toast.LENGTH_LONG).show();
 // cancel your call here    }
}
  

Манифест обновления

 <receiver  android:name=".OutGoingCallReceiver" 
android:exported="true"> 
<intent-filter>   
<action
android:name="android.intent.action.NEW_OUTGOING_CALL"
android:priority="0" /> 
</intent-filter> 
</receiver>
  

Комментарии:

1. спасибо. Однако мне нужно отключить исходящий вызов, который поступает из динамика Bluetooth, и перенаправить его в WhatsApp. Будет ли это прослушивать исходящий вызов?

2. Хорошо, я попробую ваше решение и сообщу об этом. Спасибо

3. ваше решение отлично работало на sdk 26 , но телефон моего клиента 23, и мне нужно использовать другое решение, чем ANSWER_PHONE_CALLS. у вас есть какой-нибудь быстрый совет

4. Для этого есть класс ITelephony

5. поскольку этот ответ отличный, я добавлю еще один вопрос для Android 6.0.1