Back to questions
Junior — Middle
66
Каким образом реализовать совершение входящих и исходящих звонков на платформе Android?
Answer from AI
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) необходимо запрашивать разрешения у пользователя во время выполнения приложения.