android Переадресация после 2 звонков - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь разработать приложение 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();
    }
}
...