Я пытаюсь разработать приложение android, которое перехватывает входящие вызовы.
Если номер находится в списке контактов, телефон будет звонить нормально, если нет, я хочу переадресовать вызов на другой номер.
Я пытался использовать код MMI для переадресации вызовов, но все вызовы перенаправляются постоянно, и мы не можем выполнить вызов MMI, если телефон находится в состоянии вызова.
Вопрос : Существует ли способ переадресации вызова или объединения входящего вызова с вызовом для переадресации без использования вызовов MMI, как это делают программные средства центров обработки вызовов?
Это класс BroadcastReceiver, который я использую для перехвата вызовов
public class PhoneStateReceiver extends BroadcastReceiver {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceive(Context context, Intent intent) {
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
assert state != null;
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
ApiTask backgroundTask = new ApiTask(context);
//execute the task
backgroundTask.execute("init", incomingNumber, "99999999999");
// The ApiTask check if the phone number is in the white list the call the function unconditionalForwarding(newPhoneNumber)
Toast.makeText(context, "RINGING State", Toast.LENGTH_SHORT).show();
}
if ((state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))) {
Toast.makeText(context, "Received State", Toast.LENGTH_SHORT).show();
}
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText(context, "Idle State", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void unconditionalForwarding(String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.fromParts("tel", "**21*"+phoneNumber+"#", "");
intent.setData(uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(intent);
} catch(SecurityException e) {
e.printStackTrace();
}
}