Sobes.tech
Junior — Middle

Πώς υλοποιείται η πραγματοποίηση εισερχόμενων και εξερχόμενων κλήσεων στην πλατφόρμα Android;

sobes.tech AI

Απάντηση από 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) και μετά, πρέπει να ζητάτε τα δικαιώματα από τον χρήστη κατά την εκτέλεση.