AudioManager (gestionnaire audio)


Introduction à cette section :

Dans la première section multimédia, nous avons utilisé SoundPool pour écrire un exemple de Duang. Après que le cochon ait cliqué sur un bouton, il a soudainement sonné "Duang". Un son, et le son était très fort à ce moment-là, ce qui a fait mourir de peur le bébé 1.jpg Heureusement, ce n'était pas pendant les heures de travail, j'ai secrètement écrit un blog pour en informer le manager. Ça va vous tuer~ Bon, d'accord, quand il s'agit du volume sonore, il faut introduire l'API (contrôle du volume) fournie par Android :

AudioManager (Audio Manager) Oui, cette classe est située sous le package Android.Media et fournit des opérations liées au contrôle du volume et au mode sonnerie ! Dans cette section, nous allons apprendre à utiliser ce matériel. Vous pouvez d'abord écrire une démo, un simple muet. Entrez dans Démo et cliquez sur Muet, puis 2.gif, parlez simplement ~ Eh bien, sans plus tarder, commençons cette section !

Documentation officielle de l'API : AudioManager


1. Obtenez l'instance de l'objet AudioManager

AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);


2. Explication détaillée des méthodes associées

Méthodes courantes :

  • adjustVolume(direction int, drapeaux int) : Contrôlez le volume du téléphone mobile, augmentez-le ou diminuez-le d'une unité, jugez en fonction du premier paramètre AudioManager.ADJUST_LOWER, il peut être ajusté vers le bas d'une unité AudioManager.ADJUST_RAISE<🎜 ; >, il peut être ajusté d'une unité
  • adjustStreamVolume(int streamType, int direction, int flags) : Comme ci-dessus, mais vous pouvez choisir d'ajuster le type de son 1) Le paramètre streamType spécifie le type de son. Il existe les types de sons suivants : STREAM_ALARM : alarme de téléphone portable                                                                                                                                                                                                                                 Sonnerie STREAM_SYSTEAM : Système de téléphonie mobile
    STREAM_DTMF : Tonalité  : Appel vocal 2) Le deuxième paramètre est le même que celui ci-dessus, augmentant ou diminuant le volume. 3) Bits d'indicateur facultatifs, tels que AudioManager.FLAG_SHOW_UI, afficher la barre de progression, AudioManager.
    PLAY_SOUND : lire le sonsetStreamVolume
    (int streamType , int index, intflags) : Régler le volume directement getMode( ) : Renvoyer le mode audio actuel
  • setMode
  • ( ) : Régler le son mode Il existe les modes suivants : MODE_NORMAL(normal),
  • MODE_RINGTONE
  • (sonnerie), MODE_IN_CALL(appel téléphonique),
  • MODE_IN_COMMUNICATION
  • (appel )getRingerMode( ) : renvoie le mode de sonnerie actuel setRingerMode(int streamType) : définit le mode de sonnerie Il existe plusieurs modes : Tels que RINGER_MODE_NORMAL (normal),
  • RINGER_MODE_SILENT
  • (muet), RINGER_MODE_VIBRATE (vibreur)
  • getStreamVolume(int streamType ) : Obtenez le volume actuel du téléphone. La valeur maximale est 7 et la valeur minimale est 0. Lorsqu'il est réglé sur 0, il s'ajustera automatiquement en mode vibration getStreamMaxVolume(int streamType) : Obtenir un certain volume du téléphone La valeur de volume maximale d'un type de son
  • setStreamMute
  • (int streamType,boolean state) : définir un certain type de son sur le téléphone pour qu'il soit coupé
  • setSpeakerphoneOn
  • (booléen activé) : définir s'il faut activer ou non le microphone
  • setMicrophoneMute
  • (booléen activé) : définir s'il faut désactiver le microphone
  • isMicrophoneMute
  • () : Déterminez si le microphone est coupé ou ouvert
  • isMusicActive
  • () : Déterminez si la musique est active
  • isWiredHeadsetOn
  • () : Déterminer s'il est inséré des écouteurs
  • Autres méthodes :
    • abandonnerAudioFocus(AudioManager.OnAudioFocusChangeListenerl) : Abandonner le focus audio
    • adjustSuggestedStreamVolume(int,int suggestStreamType intflags) : Ajustez le volume du flux le plus pertinent ou du flux de secours donné
    • getParameters(String Keys) : définissez un nombre variable de valeurs de paramètres pour le matériel audio
    • getVibrateSetting(int vibrateType) : indique si la vibration de l'utilisateur est définie sur le type de vibration
    • isBluetoothA2dpOn() : vérifie si le routage audio du casque Bluetooth A2DP est activé ou désactivé
    • isBluetoothScoAvailableOffCall() : indique si la plate-forme actuelle prend en charge le cas d'appel hors appel en utilisant SCO
    • isBluetoothScoOn() : vérifie si la communication utilise Bluetooth SCO
    • loadSoundEffects() : Charger les effets sonores
    • playSoundEffect((int effectType, float volume) : Lire les effets sonores
    • egisterMediaButtonEventReceiver(ComponentName eventReceiver) : Enregistrez le seul récepteur de l'intention MEDIA_BUTTON d'un composant
    • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) Demander le focus audio
    • setBluetoothScoOn(booléen activé) : Demande d'utilisation du casque Bluetooth SCO pour la communication
    • startBluetoothSco/stopBluetoothSco()() : Démarrer /Arrêter la connexion audio Bluetooth SCO
    • unloadSoundEffects() : Décharger les effets sonores

    3. Exemple d'utilisation

    Hé, il y a beaucoup d'attributs, dont certains impliquent des choses comme Bluetooth. Ici, nous expliquons seulement certaines des méthodes les plus courantes !

    Lorsque nous en rencontrons des spéciaux que nous n’avons jamais vus auparavant, vérifions à nouveau la documentation !

    Exemple simple : utilisez Mediaplayer pour lire de la musique, réglez le volume et coupez le son via AudioManager !

    Au fait, créez d'abord un dossier brut sous res et jetez-y un fichier de ressources MP3 !

    Exécution des rendus :

    3.gif

    Implémentation du code :

    Code de mise en page activity_main.xml :

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="播放" />
    
        <Button
            android:id="@+id/btn_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:enabled="false"
            android:text="停止" />
    
        <Button
            android:id="@+id/btn_higher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="调高音量" />
    
        <Button
            android:id="@+id/btn_lower"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="调低音量" />
    
        <Button
            android:id="@+id/btn_quite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="静音" /></LinearLayout>

    MainActivity.java :

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button btn_start;
        private Button btn_stop;
        private Button btn_higher;
        private Button btn_lower;
        private Button btn_quite;
        private MediaPlayer mePlayer;
        private AudioManager aManager;
        //定义一个标志用来标示是否点击了静音按钮
        private int flag = 1;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获得系统的音频对象
            aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
            //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
            mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
            //设置循环播放:
            mePlayer.setLooping(true);
            bindViews();
        }
    
        private void bindViews() {
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_stop = (Button) findViewById(R.id.btn_stop);
            btn_higher = (Button) findViewById(R.id.btn_higher);
            btn_lower = (Button) findViewById(R.id.btn_lower);
            btn_quite = (Button) findViewById(R.id.btn_quite);
    
            btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
            btn_higher.setOnClickListener(this);
            btn_lower.setOnClickListener(this);
            btn_quite.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_start:
                    btn_stop.setEnabled(true);
                    mePlayer.start();
                    btn_start.setEnabled(false);
                    break;
                case R.id.btn_stop:
                    btn_start.setEnabled(true);
                    mePlayer.pause();
                    btn_stop.setEnabled(false);
                    break;
                case R.id.btn_higher:
                    // 指定调节音乐的音频,增大音量,而且显示音量图形示意
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                    break;
                case R.id.btn_lower:
                    // 指定调节音乐的音频,降低音量,只有声音,不显示图形条
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
                    break;
                case R.id.btn_quite:
                    // 指定调节音乐的音频,根据isChecked确定是否需要静音
                    flag *= -1;
                    if (flag == -1) {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);   //API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
    //                            AudioManager.FLAG_SHOW_UI);   //23以后的版本用这个
                        btn_quite.setText("取消静音");
                    } else {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
    //                            AudioManager.FLAG_SHOW_UI);  //23以后的版本用这个
                        aManager.setMicrophoneMute(false);
                        btn_quite.setText("静音");
                    }
                    break;
            }
        }
    }

    Le code est toujours très simple et la méthode de mise en sourdine est setStreamMute () a expiré dans la version 23 de l'API, Vous pouvez utiliser une autre méthode ajusterStreamVolume(int, int, int), puis définir la troisième propriété :

    ADJUST_MUTE ou ADJUST_UNMUTE !

    D'ailleurs, il y a aussi :

    Si vous réglez la vibration (Vibrator) dans le troisième paramètre de adjustStreamVolume(), Vous devez ajouter cette autorisation dans AndroidManifest.xml !

    <**uses-permission android:name="android.permission.VIBRATE"**/>

    4. Téléchargement d'un exemple de code

    AudioManagerDemo.zip


    Résumé de cette section :

    D'accord, cette section vous montre une utilisation simple d'AudioManager pour régler le volume. Cette classe n'est pas couramment utilisée par l'auteur. Allez, s'il y a de nouvelles compétences que vous pouvez acquérir à l'avenir, ajoutez-les s'il vous plaît ~ Hehe, as-tu fini d'écrire la démo muette ? Il faut le combiner avec les besoins réels~4.gif

    De plus, le blog risque de ne pas être mis à jour trop fréquemment cette semaine, je dois remplacer la bibliothèque WebSocket de l'entreprise cette semaine, ce qui me donnera mal à la tête~. D'accord, c'est tout, merci~