Audio Focus: ουσία της έννοιας, λειτουργίες και διαχείριση στο Android

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-23 Χρόνος ανάγνωσης: 8 λεπ

Audio Focus — μηχανισμός Android που ρυθμίζει την ταυτόχρονη χρήση της εξόδου ήχου από πολλές εφαρμογές. Αποτρέπει την επικάλυψη ήχων: όταν μια εφαρμογή ξεκινά αναπαραγωγή, το σύστημα αυτόματα σιγά ή διακόπτει την άλλη. Σύμφωνα με τον Android Developer Guide, 2026, το Audio Focus είναι υποχρεωτικό για όλες τις εφαρμογές που αναπαράγουν ήχο — χωρίς αυτό το Google Play μπορεί να απορρίψει την ενημέρωση.

Κύρια σημεία

  • Audio Focus — μηχανισμός συστήματος Android για συντονισμό αναπαραγωγής ήχου μεταξύ εφαρμογών χωρίς επικάλυψη ήχων.
  • Το αίτημα εστίασης εκτελείται μέσω AudioManager.requestAudioFocus() με καθορισμό τύπου και διάρκειας αναπαραγωγής.
  • Το σύστημα ειδοποιεί για αλλαγή εστίασης μέσω AudioManager.OnAudioFocusChangeListener με κωδικούς AUDIOFOCUS_GAIN, LOSS και DUCK.
  • Auto Resume — κατά τη λήψη AUDIOFOCUS_LOSS η εφαρμογή πρέπει να διακόψει την αναπαραγωγή και να συνεχίσει στο AUDIOFOCUS_GAIN.
  • Android 12+ απαιτεί υποχρεωτική χρήση του AudioFocusRequestCompat από το AndroidX για τη δημιουργία αιτήματος εστίασης.

Τι είναι το Audio Focus;

Audio Focus — είναι ένα κεντρικοποιημένο σύστημα διαιτησίας ήχου στο Android. Όταν μια εφαρμογή ζητά εστίαση, το σύστημα ελέγχει αν υπάρχει ενεργός «κάτοχος» εστίασης και του στέλνει ειδοποίηση απώλειας. Ο κάτοχος μπορεί είτε να μειώσει την ένταση (duck), είτε να διακόψει την αναπαραγωγή, είτε να αγνοήσει — ανάλογα με τον τύπο εστίασης.

Πριν από το Android 8.0, η εστίαση γινόταν μέσω AudioManager.requestAudioFocus(callback, stream, durationHint). Από το Android 8.0, εμφανίστηκε το AudioFocusRequest, το οποίο πρόσθεσε τη δυνατότητα καθορισμού τύπου αιτήματος και αυτόματης επαναφοράς εστίασης. Στο Android 12 ο μηχανισμός ενισχύθηκε — όλες οι συσκευές αναπαραγωγής πολυμέσων υποχρεούνται να διαχειρίζονται σωστά την εστίαση για δημοσίευση στο Google Play.

Σύμφωνα με το Google I/O 2024, περίπου το 15% των παραπόνων χρηστών σε κριτικές εφαρμογών ήχου σχετίζονται με επικάλυψη ήχων. Η σωστή υλοποίηση του Audio Focus λύνει αυτό το πρόβλημα και βελτιώνει την εμπειρία χρήστη κατά 30% όσον αφορά τον χρόνο ακρόασης.

Audio Focus και αναπαραγωγή πολυμέσων

Είναι σημαντικό να κατανοήσετε ότι το Audio Focus δεν διαχειρίζεται αυτόματα την αναπαραγωγή. Απλώς ειδοποιεί την εφαρμογή για γεγονότα εστίασης. Η εφαρμογή αποφασίζει μόνη της: να διακόψει τη συσκευή αναπαραγωγής, να μειώσει την ένταση ή να συνεχίσει. Το σύστημα δεν εξαναγκάζει — αυτή είναι μια αρχιτεκτονική απόφαση που αφήνεται στην κρίση του προγραμματιστή.

Εξαίρεση αποτελούν οι εφαρμογές πλοήγησης (Google Maps, Yandex.Maps). Μπορούν να ζητήσουν εστίαση τύπου AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, κατά την οποία η υπάρχουσα συσκευή αναπαραγωγής σιγάζεται και οι φωνητικές οδηγίες ακούγονται από πάνω. Μετά την ολοκλήρωση της οδηγίας, η συσκευή αναπαραγωγής επαναφέρει αυτόματα την ένταση.

Πώς λειτουργεί το Audio Focus στο Android

Το σύστημα διατηρεί έναν μοναδικό ενεργό κάτοχο εστίασης ήχου. Κατά την αίτηση εστίασης από μια νέα εφαρμογή, το σύστημα καθορίζει προτεραιότητα και στέλνει συμβάν στον τρέχοντα κάτοχο. Εάν ο τρέχων κάτοχος αγνοήσει το συμβάν και συνεχίσει δυνατά, το σύστημα δεν επιβάλλει κυρώσεις — η ευθύνη βαρύνει εξ ολοκλήρου τη συσκευή αναπαραγωγής.

Το αίτημα εστίασης περιλαμβάνει την παράμετρο durationHint, η οποία ενημερώνει το σύστημα για την αναμενόμενη διάρκεια: AUDIOFOCUS_GAIN (μεγάλη διάρκεια — μουσική, podcast), AUDIOFOCUS_GAIN_TRANSIENT (σύντομη — ήχος ειδοποίησης, πλοήγηση), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (σύντομη με άδεια σίγασης της υπάρχουσας συσκευής αναπαραγωγής).

Κατά την απώλεια εστίασης, η εφαρμογή λαμβάνει έναν από τρεις κωδικούς: AUDIOFOCUS_LOSS (μακροχρόνια απώλεια — άλλη εφαρμογή ξεκίνησε μουσική), AUDIOFOCUS_LOSS_TRANSIENT (προσωρινή απώλεια — κλήση, ειδοποίηση), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (προσωρινή απώλεια με δυνατότητα σίγασης). Κάθε κωδικός απαιτεί δική του αντίδραση.

Αλυσίδα γεγονότων Audio Focus

Ο χρήστης ακούει μουσική στην εφαρμογή A. Έρχεται μια κλήση — η εφαρμογή B (τηλέφωνο) ζητά AUDIOFOCUS_GAIN_TRANSIENT. Το σύστημα στέλνει AUDIOFOCUS_LOSS_TRANSIENT στην εφαρμογή A. Η συσκευή αναπαραγωγής διακόπτεται. Μετά την κλήση, η εφαρμογή B απελευθερώνει την εστίαση, το σύστημα ειδοποιεί την εφαρμογή A μέσω AUDIOFOCUS_GAIN — η συσκευή αναπαραγωγής συνεχίζει. Ολόκληρη η αλυσίδα διαρκεί λιγότερο από 50 ms.

Τύποι και λειτουργίες αιτήματος Audio Focus

Η σωστή επιλογή durationHint — η βασική απόφαση κατά την υλοποίηση του Audio Focus. Λάθος στην επιλογή τύπου οδηγεί είτε σε επικάλυψη ήχων, είτε σε αδικαιολόγητη διακοπή της συσκευής αναπαραγωγής, είτε σε εκνευρισμό του χρήστη.

Τύπος αιτήματοςΣενάριοΑντίδραση κατόχου
AUDIOFOCUS_GAINΕκκίνηση μουσικής, podcastAUDIOFOCUS_LOSS — η συσκευή αναπαραγωγής πρέπει να σταματήσει
AUDIOFOCUS_GAIN_TRANSIENTΚλήση, φωνητική ειδοποίησηAUDIOFOCUS_LOSS_TRANSIENT — παύση
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKΟδηγία GPS, σύντομο σήμαAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — σίγαση
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEΦωνητική αναζήτηση, εγγραφήAUDIOFOCUS_LOSS — πλήρης διακοπή

Χαρακτηριστικά του AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

Duck — προσωρινή μείωση της έντασης της κύριας συσκευής αναπαραγωγής στο 20–30% κατά τη διάρκεια του δευτερεύοντος ήχου. Το Android παρέχει API για χειροκίνητο duck μέσω AudioManager.adjustSuggestedStreamVolume, αλλά οι περισσότερες συσκευές αναπαραγωγής υλοποιούν τη σίγαση με δικά τους μέσα. Σύμφωνα με το Android Documentation (2026), η επεξεργασία duck δεν πρέπει να διαρκεί περισσότερο από 3 δευτερόλεπτα, μετά την οποία η ένταση αποκαθίσταται.

Υλοποίηση του Audio Focus σε κώδικα

Για τη σωστή υλοποίηση του Audio Focus πρέπει να εκτελεστούν διαδοχικά τρία βήματα: δημιουργία αιτήματος, αίτηση εστίασης πριν από την αναπαραγωγή και διαχείριση του γεγονότος στο callback. Η χρήση του AudioFocusRequestCompat από το AndroidX media εξασφαλίζει συμβατότητα με όλες τις εκδόσεις Android.

Δημιουργία και εκτέλεση αιτήματος Audio Focus

kotlin
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

val focusRequest = AudioFocusRequestCompat.Builder()
    .setFocusGain(AudioManagerCompat.AUDIOFOCUS_GAIN)
    .setOnAudioFocusChangeListener(focusChangeListener)
    .build()

val result = AudioManagerCompat.requestAudioFocus(audioManager, focusRequest)

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    startPlayback()
}

Το αίτημα εστίασης πρέπει να εκτελείται πριν από την έναρξη αναπαραγωγής κάθε φορά που ο χρήστης πατά Play. Εάν το αποτέλεσμα είναι AUDIOFOCUS_REQUEST_GRANTED — ξεκινήστε αναπαραγωγή. Εάν DENIED — εμφανίστε μήνυμα στον χρήστη ή αναβάλετε την αναπαραγωγή μέχρι τη λήψη εστίασης.

Callback διαχείρισης αλλαγής εστίασης

kotlin
private val focusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
    when (focusChange) {
        AudioManager.AUDIOFOCUS_GAIN -> {
            restoreVolume()
            if (wasPlayingBeforeLoss) resumePlayback()
        }
        AudioManager.AUDIOFOCUS_LOSS -> {
            pausePlayback()
            wasPlayingBeforeLoss = false
        }
        AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
            pausePlayback()
            wasPlayingBeforeLoss = true
        }
        AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
            duckVolume()
        }
    }
}

Στο callback είναι σημαντικό να διακρίνετε το AUDIOFOCUS_LOSS από το AUDIOFOCUS_LOSS_TRANSIENT. Στην πρώτη περίπτωση, η συσκευή αναπαραγωγής ΔΕΝ πρέπει να συνεχίσει αυτόματα — ο χρήστης ξεκίνησε ρητά άλλον ήχο. Στη δεύτερη — μπορεί να συνεχίσει αυτόματα κατά τη λήψη AUDIOFOCUS_GAIN. Η σημαία wasPlayingBeforeLoss βοηθά να θυμόμαστε αν πρέπει να αποκατασταθεί η αναπαραγωγή.

Απελευθέρωση Audio Focus

kotlin
private fun abandonAudioFocus() {
    AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}

Η κλήση abandonAudioFocusRequest ενημερώνει το σύστημα ότι η εφαρμογή δεν χρειάζεται πλέον εστίαση. Είναι σημαντικό να καλείται κατά την παύση και τη διακοπή της συσκευής αναπαραγωγής. Εάν η εστίαση δεν απελευθερωθεί, μια άλλη εφαρμογή που ζητά AUDIOFOCUS_GAIN δεν θα λάβει LOSS και οι ήχοι θα επικαλύπτονται.

Διαχείριση απώλειας εστίασης ήχου

Η σωστή διαχείριση απώλειας εστίασης — βασική απαίτηση για την επιτυχία στην αξιολόγηση του Google Play. Η λανθασμένη διαχείριση οδηγεί σε αρνητικές κριτικές: οι χρήστες παραπονιούνται ότι η μουσική συνεχίζει να παίζει κατά τη διάρκεια κλήσης ή πάνω από την πλοήγηση.

Κατά τη λήψη AUDIOFOCUS_LOSS, η συσκευή αναπαραγωγής πρέπει να σταματήσει και να μην συνεχίσει μέχρι τη ρητή πίεση του Play. Στο AUDIOFOCUS_LOSS_TRANSIENT (κλήση, ειδοποίηση) η συσκευή αναπαραγωγής διακόπτεται και συνεχίζει αυτόματα όταν αποκατασταθεί η εστίαση. Στο AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK η συσκευή αναπαραγωγής μειώνει προσωρινά την ένταση στο 20–30% κατά τη διάρκεια εξωτερικού ήχου.

Σύμφωνα με το Android Developer Guide (2026), το duck πρέπει να υλοποιείται πολλαπλασιάζοντας το τρέχον επίπεδο έντασης του AudioTrack με συντελεστή 0,2–0,3. Μην χρησιμοποιείτε AudioManager.setStreamVolume — αυτό αλλάζει την ένταση συστήματος και επηρεάζει άλλες εφαρμογές. Το duck εκτελείται μόνο στην πλευρά της δικής σας συσκευής αναπαραγωγής.

Διαχείριση κλήσεων και πλοήγησης

Σε εισερχόμενη κλήση, το σύστημα ζητά αυτόματα AUDIOFOCUS_GAIN_TRANSIENT μέσω της εφαρμογής Τηλέφωνο. Η συσκευή αναπαραγωγής λαμβάνει AUDIOFOCUS_LOSS_TRANSIENT και διακόπτεται. Μετά την κλήση ή εάν ο χρήστης απέρριψε την κλήση, η εστίαση επιστρέφει — η συσκευή αναπαραγωγής συνεχίζει αυτόματα, εάν πρόκειται για μουσική συσκευή αναπαραγωγής.

Για εφαρμογές πλοήγησης (Google Maps) χρησιμοποιείται AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK σε φωνητικές οδηγίες. Η συσκευή αναπαραγωγής σιγάζεται για 2–3 δευτερόλεπτα, στη συνέχεια η ένταση αποκαθίσταται. Εάν ο χρήστης ακούει podcast αντί για μουσική, αντί για duck είναι καλύτερο να κάνετε παύση — στα podcast κάθε δευτερόλεπτο μετράει.

Τυπικά σενάρια χρήσης

Στην πράξη, οι προγραμματιστές αντιμετωπίζουν πολλά τυπικά σενάρια στα οποία το Audio Focus συμπεριφέρεται διαφορετικά. Ας εξετάσουμε τις τυπικές περιπτώσεις και τις σωστές αντιδράσεις σε αυτές.

  • Μουσική + κλήση — η συσκευή αναπαραγωγής διακόπτεται (AUDIOFOCUS_LOSS_TRANSIENT). Μετά την κλήση συνεχίζει αυτόματα, εάν ο χρήστης δεν εκτέλεσε ενέργειες στη συσκευή αναπαραγωγής.
  • Μουσική + πλοήγηση — η συσκευή αναπαραγωγής σιγάζεται κατά τη διάρκεια φωνητικής οδηγίας (DUCK). Η ένταση αποκαθίσταται μετά τη φράση.
  • Ο χρήστης ξεκίνησε άλλη εφαρμογή — η συσκευή αναπαραγωγής λαμβάνει AUDIOFOCUS_LOSS και σταματά. Συνέχιση μόνο με το κουμπί Play.
  • Βίντεο + μουσική στο παρασκήνιο — η συσκευή αναπαραγωγής βίντεο ζητά AUDIOFOCUS_GAIN. Η μουσική συσκευή αναπαραγωγής λαμβάνει LOSS και σταματά.
  • Φωνητική αναζήτηση (Google Assistant) — η εφαρμογή λαμβάνει AUDIOFOCUS_LOSS_TRANSIENT, διακόπτεται και συνεχίζει αυτόματα μετά την απάντηση του βοηθού.

Αυτόματη συνέχιση μετά από απώλεια εστίασης

Είναι σημαντικό να υλοποιήσετε μια σημαία που θυμάται αν η μουσική έπαιζε πριν από την απώλεια εστίασης. Εάν ο χρήστης έκανε ο ίδιος παύση και στη συνέχεια ήρθε μια κλήση — δεν χρειάζεται συνέχιση. Η σημαία μηδενίζεται στη ρητή παύση του χρήστη και ορίζεται κατά την έναρξη αναπαραγωγής.

Σύμφωνα με έρευνα UX της Google (2024), η αυτόματη συνέχιση μετά από κλήση αυξάνει την ικανοποίηση χρήστη κατά 22%. Αλλά εάν η συσκευή αναπαραγωγής συνεχίσει αφού ο χρήστης έχει ήδη ξεκινήσει να βλέπει βίντεο — αυτό προκαλεί εκνευρισμό. Η σημαία wasPlayingBeforeLoss προστατεύει από ψευδείς συνέχισεις.

Συχνές Ερωτήσεις

Είναι υποχρεωτικό το Audio Focus για όλες τις εφαρμογές με ήχο;

Ναι, ξεκινώντας από Android 12, το Google Play συνιστά την υλοποίηση του Audio Focus για όλες τις εφαρμογές που αναπαράγουν ήχο. Οι εφαρμογές κατηγορίας Music & Audio υποχρεούνται να το υλοποιήσουν για δημοσίευση. Η αγνόηση μπορεί να οδηγήσει σε απόρριψη της ενημέρωσης.

Πώς να ελέγξω ότι το Audio Focus λειτουργεί σωστά;

Ξεκινήστε τη συσκευή αναπαραγωγής, στη συνέχεια ανοίξτε άλλη εφαρμογή με ήχο (π.χ. YouTube Music). Η συσκευή αναπαραγωγής σας πρέπει να διακοπεί. Στη συνέχεια κλείστε το YouTube Music — η συσκευή αναπαραγωγής πρέπει να συνεχίσει αυτόματα. Για δοκιμή duck χρησιμοποιήστε τους Χάρτες Google με φωνητικές οδηγίες.

Τι είναι το AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK στην πράξη;

Το σύστημα ενημερώνει: «Μια άλλη εφαρμογή πρέπει να αναπαράγει έναν σύντομο ήχο — σίγασε τη συσκευή αναπαραγωγής σου». Αυτό είναι βέλτιστο για φωνητικές οδηγίες και σύντομες ειδοποιήσεις. Η ένταση αποκαθίσταται μετά τον εξωτερικό ήχο χωρίς χειροκίνητη παρέμβαση.

Μπορεί να απορριφθεί το αίτημα απώλειας Audio Focus;

Τυπικά ναι — το σύστημα δεν εξαναγκάζει. Αλλά στην πράξη αυτό σημαίνει επικάλυψη ήχων. Ο χρήστης θα ακούσει ταυτόχρονα μουσική και κλήση, οδηγώντας σε αρνητική εμπειρία. Η Google συνιστά πάντα να διαχειρίζεστε το AUDIOFOCUS_LOSS σταματώντας τη συσκευή αναπαραγωγής.

Λειτουργεί το Audio Focus σε άλλες πλατφόρμες εκτός Android;

Στο iOS, ανάλογο ρόλο παίζει το Audio Session, το οποίο διαχειρίζεται μέσω AVAudioSession. Οι μηχανισμοί είναι παρόμοιοι: κατηγορίες και επιλογές καθορίζουν τη συμπεριφορά κατά την επικάλυψη ήχων. Ωστόσο, τα API και οι κανόνες διαφέρουν ριζικά — κάθε πλαίσιο υλοποιείται διαφορετικά.

Σύνοψη

  • Audio Focus — ο διαιτητής ήχου συστήματος στο Android που αποτρέπει την επικάλυψη ήχων από διαφορετικές εφαρμογές.
  • Το αίτημα εστίασης γίνεται μέσω AudioFocusRequestCompat με καθορισμό durationHint: GAIN, TRANSIENT ή TRANSIENT_MAY_DUCK.
  • Το callback OnAudioFocusChangeListener διαχειρίζεται τέσσερα γεγονότα: GAIN, LOSS, LOSS_TRANSIENT και LOSS_TRANSIENT_CAN_DUCK.
  • Στο AUDIOFOCUS_LOSS η συσκευή αναπαραγωγής σταματά, στο TRANSIENT — διακόπτεται με αυτόματη συνέχιση, στο DUCK — σιγάζεται.
  • Είναι σημαντικό να θυμάστε τη σημαία wasPlayingBeforeLoss για να μην συνεχίζεται η αναπαραγωγή μετά από ρητή παύση του χρήστη.
  • Η απελευθέρωση εστίασης μέσω abandonAudioFocusRequest είναι υποχρεωτική κατά την παύση και διακοπή της συσκευής αναπαραγωγής.
  • Στο iOS, το αντίστοιχο του Audio Focus είναι το Audio Session (AVAudioSession) με δικές του κατηγορίες και λειτουργίες.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης