Gli utenti si aspettano di poter controllare il volume di un'app audio. Comportamento standard include la possibilità di utilizzare i controlli del volume (i pulsanti o le manopole della dispositivo o cursori nell'interfaccia utente) e per evitare di emettere improvvisamente un volume alto se ad esempio le cuffie è disconnessa durante l'uso.
Uso dei controlli del volume
Quando un utente preme un tasto del volume in un'app di gioco o di musica, il volume dovrebbe anche se il player viene messo in pausa tra un brano e l'altro o non c'è musica per posizione attuale del gioco.
Android utilizza stream audio separati per la riproduzione di musica, sveglie notifiche, suoneria delle chiamate in arrivo, suoni di sistema, volume delle chiamate e DTMF . In questo modo gli utenti possono controllare il volume di ogni stream in modo indipendente.
Per impostazione predefinita, la pressione del controllo del volume modifica il volume dell'audio attivo. flusso di dati. Se al momento l'app non sta riproducendo alcun contenuto, premi i tasti del volume regola il volume della musica (o il volume della suoneria prima di Android 9).
A meno che la tua app non sia una sveglia, dovresti riprodurre audio con l'utilizzo
AudioAttributes.USAGE_MEDIA
.
Per assicurarti che i controlli del volume si regoli
lo stream corretto, devi richiamare
setVolumeControlStream()
che passa il tipo di flusso corrispondente agli attributi che puoi recuperare
AudioAttributes.getVolumeControlStream
.
Kotlin
setVolumeControlStream(AudioManager.STREAM_MUSIC)
Java
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Effettua questa chiamata durante il ciclo di vita della tua app, in genere dal onResume()
il metodo dell'attività o del frammento che controlla i tuoi contenuti multimediali. Questo collega
i controlli del volume impostandoli su STREAM_MUSIC
ogni volta che l'attività o il frammento target
è visibile.
Controllo del volume dei flussi in modo programmatico
In rari casi, puoi impostare il volume di uno stream audio in modo programmatico. Per
ad esempio quando l'app sostituisce una UI esistente. Questa azione è sconsigliata perché
L'AudioManager
di Android unisce tutti gli stream audio dello stesso tipo.
Questi metodi consentono di modificare il volume di ogni app che utilizza lo stream. Evita di utilizzare
quali:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Utilizzare dispositivi a volume fisso
Alcuni dispositivi (come i Chromebook) sono dotati di controlli del volume ma non consentono alle app di usare AudioManager
descritti sopra per modificare il livello di uno stream audio. Questi vengono chiamati
dispositivi a volume fisso. Puoi scoprire se le tue
l'app è in esecuzione su un dispositivo a volume fisso chiamando il numero isVolumeFixed()
.
Un'app audio deve offrire la possibilità di bilanciare
il volume di uscita con altre app che potrebbero essere in riproduzione sullo stesso stream.
Sui dispositivi a volume fisso, l'app deve collegare i propri controlli del volume alla
metodo setVolume()
appropriato nella tabella seguente:
Giocatore | Metodo |
---|---|
Traccia audio | AudioTrack.setVolume() |
Media player | MediaPlayer.setVolume() |
ExoPlayer | Usa SimpleExoPlayer.setVolume() , che imposta il volume dell'AudioTrack sottostante. |
Non fare rumore
Gli utenti hanno a disposizione diverse alternative per godersi l'audio dal sui dispositivi Android. La maggior parte dei dispositivi è dotata di altoparlante integrato, jack per cuffie per le cuffie con cavo e molte dispongono inoltre di connettività Bluetooth e supporto per Audio A2DP.
Quando le cuffie sono scollegate o un dispositivo Bluetooth disconnesso, lo stream audio reindirizza automaticamente l'utente all'altoparlante integrato. Se ascolti musica a un volume elevato volume, potrebbe essere una rumorosa sorpresa.
Gli utenti di solito si aspettano app che includono un lettore musicale con riproduzione sullo schermo per mettere in pausa la riproduzione. Altre app, ad esempio giochi che non supportano controlli, dovresti continuare a giocare. L'utente può regolare il volume con controlli hardware del dispositivo.
Quando l'uscita audio torna all'altoparlante integrato, il sistema trasmette un ACTION_AUDIO_BECOMING_NOISY
l'intento. Devi creare un BroadcastReceiver
che ascolta questa intenzione ogni volta che riproduci l'audio. Il destinatario dovrebbe avere l'aspetto seguente:
Kotlin
private class BecomingNoisyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) { // Pause the playback } } }
Java
private class BecomingNoisyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { // Pause the playback } } }
Registra il ricevitore all'inizio della riproduzione e annulla la registrazione quando la interrompi.
Se progetti la tua app come descritto in questa guida, queste chiamate dovrebbero essere visualizzate
nei callback della sessione multimediale onPlay()
e onStop()
.
Kotlin
private val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY) private val myNoisyAudioStreamReceiver = BecomingNoisyReceiver() private val callback = object : MediaSessionCompat.Callback() { override fun onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter) } override fun onStop() { unregisterReceiver(myNoisyAudioStreamReceiver) } }
Java
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver(); MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() { @Override public void onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter); } @Override public void onStop() { unregisterReceiver(myNoisyAudioStreamReceiver); } }