Sobes.tech
Назад к вопросам
Junior — Middle
67

Каким образом реализовать совершение входящих и исходящих звонков на платформе Android?

Ответ от нейросети

sobes.tech AI

Для реализации входящих и исходящих звонков на Android используются стандартные API платформы.

Исходящие звонки: Для совершения исходящего звонка можно использовать Intent с действием Intent.ACTION_CALL или Intent.ACTION_DIAL.

  • ACTION_DIAL открывает приложение телефона с номером, но не совершает звонок автоматически.
  • ACTION_CALL сразу инициирует звонок, но требует разрешения CALL_PHONE.

Пример кода для исходящего звонка:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+1234567890"));
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    context.startActivity(callIntent);
} else {
    // Запросить разрешение у пользователя
}

Входящие звонки: Для обработки входящих звонков нужно использовать TelephonyManager и PhoneStateListener или BroadcastReceiver для прослушивания состояния звонка.

Пример использования PhoneStateListener:

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener callStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String phoneNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                // Входящий звонок
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // Звонок активен
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // Звонок завершен или нет звонков
                break;
        }
    }
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Для полноценной работы с звонками также могут потребоваться дополнительные разрешения, например, READ_PHONE_STATE.

Важно учитывать, что начиная с Android 6.0 (API 23) необходимо запрашивать разрешения у пользователя во время выполнения приложения.