Introduction à cette section :

Dans la première section sur le multimédia, nous avons utilisé SoundPool pour écrire un exemple « Duang ». Après que le petit cochon a cliqué sur un bouton, un fort son « Duang » a soudainement retenti, et c'était tellement fort que ça a fait une peur bleue au bébé, heureusement que ce n'était pas pendant les heures de travail. Si le patron savait que j'écrivais secrètement des articles de blog pendant les heures de travail, j'aurais de gros ennuis~ Bon, en parlant de volume, je dois présenter l'API qu'Android fournit pour (le contrôle du volume) :

AudioManager (Gestionnaire audio). Cette classe se trouve dans 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 truc. Vous pouvez écrire une démo, un simple mode muet. Chaque fois avant de regarder un petit film, entrez d'abord dans la démo et cliquez sur muet, puis, je plaisante~ Bon, sans plus attendre, commençons cette section !

Documentation officielle de l'API :AudioManager


1. Obtenir une 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(int direction, int flags) : contrôle le volume du téléphone, en augmentant ou en diminuant d'une unité, selon le premier paramètreAudioManager.ADJUST_LOWER, peut diminuer d'une unité ;AudioManager.ADJUST_RAISE, peut augmenter d'une unité
  • adjustStreamVolume(int streamType, int direction, int flags) : Identique à ci-dessus, mais vous pouvez choisir le type de son à ajuster. 1) Le paramètre streamType spécifie le type de son. Il existe les types de sons suivants :STREAM_ALARM: alarme du téléphoneSTREAM_MUSIC: musique du téléphone
    STREAM_RING: sonnerie du téléphoneSTREAM_SYSTEAM: système du téléphone
    STREAM_DTMF: tonalitéSTREAM_NOTIFICATION: notification système
    STREAM_VOICE_CALL: appel vocal 2) Le deuxième paramètre est le même que celui ci-dessus, pour augmenter ou diminuer le volume. 3) Indicateurs facultatifs, par exemple AudioManager.FLAG_SHOW_UI, affiche la barre de progression, AudioManager.PLAY_SOUND: joue un son
  • setStreamVolume(int streamType, int index, intflags) : définit directement le niveau de volume
  • getMode( ) : renvoie le mode audio actuel
  • setMode( ) : définit le mode sonore Il existe les modes suivants :MODE_NORMAL(normal),MODE_RINGTONE(sonnerie),MODE_IN_CALL(en appel),MODE_IN_COMMUNICATION(communication)
  • getRingerMode( ) : Renvoie le mode de sonnerie actuel
  • setRingerMode(int streamType) : Définit le mode de sonnerie Les modes suivants sont disponibles : Par exempleRINGER_MODE_NORMAL(normal),RINGER_MODE_SILENT(silencieux),RINGER_MODE_VIBRATE(vibreur)
  • getStreamVolume(int streamType) : Obtient le volume actuel du téléphone, avec une valeur maximale de 7 et une valeur minimale de 0. Lorsqu'il est réglé sur 0, il passe automatiquement en mode vibreur
  • getStreamMaxVolume(int streamType) : Obtient la valeur de volume maximale pour un certain type de son du téléphone
  • setStreamMute(int streamType, boolean state) : Met en sourdine un certain type de son du téléphone
  • setSpeakerphoneOn(boolean on) : Définit si le haut-parleur doit être activé
  • setMicrophoneMute(boolean on) : Définit si le microphone doit être mis en sourdine
  • isMicrophoneMute( ) : Détermine si le microphone est en sourdine ou activé
  • isMusicActive( ) : Détermine s'il y a de la musique dans un état actif
  • isWiredHeadsetOn( ) : Détermine si des écouteurs sont branchés

Autres méthodes:

  • abandonAudioFocus(AudioManager.OnAudioFocusChangeListener l) : Abandonne le focus audio
  • adjustSuggestedStreamVolume(int,int suggestedStreamType int flags): Ajuste le volume du flux le plus pertinent, ou du flux de secours donné
  • getParameters(String keys): Définit un nombre variable de valeurs de paramètres pour le matériel audio
  • getVibrateSetting(int vibrateType): Renvoie si le réglage de vibration de l'utilisateur est défini sur le type de vibration
  • isBluetoothA2dpOn( ): Vérifie si la route audio du casque Bluetooth A2DP est activée ou désactivée
  • isBluetoothScoAvailableOffCall( ): Indique si la plateforme actuelle prend en charge le cas d'utilisation hors appel avec SCO
  • isBluetoothScoOn( ): Vérifie si la communication utilise Bluetooth SCO
  • loadSoundEffects( ): Charge un effet sonore
  • playSoundEffect(int effectType, float volume): Joue un effet sonore
  • egisterMediaButtonEventReceiver(ComponentName eventReceiver): Enregistre un composant comme récepteur unique pour l'intent MEDIA_BUTTON
  • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l, int streamType, int durationHint) Demande le focus audio
  • setBluetoothScoOn(boolean on): Nécessite l'utilisation d'un casque Bluetooth SCO pour la communication
  • startBluetoothSco/stopBluetoothSco()( ): Démarre/arrête la connexion audio Bluetooth SCO
  • unloadSoundEffects( ) : Décharge les effets sonores

3. Exemples d'utilisation

Héhé, il y a pas mal de propriétés, et certaines impliquent même des choses comme le Bluetooth. Ici, nous n'expliquerons que les méthodes les plus courantes !

Si nous rencontrons des cas particuliers ou peu familiers, nous pouvons consulter la documentation !

Exemple simple : utilisez MediaPlayer pour lire de la musique, et ajustez le volume et la sourdine via AudioManager !

Au fait, créez d'abord un dossier raw sous res, et déposez-y un fichier ressource MP3 !

Capture d'écran de l'effet d'exécution:

Implémentation du code:

Code de mise en pageactivity_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 encore très simple. De plus, la méthode pour activer la sourdinesetStreamMute() a été dépréciée dans l'API 23. Vous pouvez utiliser une autre méthode, adjustStreamVolume(int, int, int), puis définir le troisième paramètre :

ADJUST_MUTEouADJUST_UNMUTE!

Oh, et aussi :

SiadjustStreamVolumele troisième paramètre de () est défini sur vibration (Vibrator), alors vous devez ajouter cette autorisation dans AndroidManifest.xml !

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

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

AudioManagerDemo.zip


Résumé de cette section :

D'accord, dans cette section, nous avons démontré une utilisation simple d'AudioManager pour ajuster le volume. Moi, l'auteur, je n'utilise pas très souvent cette classe. Si j'apprends de nouvelles compétences à l'avenir, je les ajouterai~ Héhé, avez-vous terminé d'écrire la démo de mise en sourdine ? Faites-le selon les besoins réels~

De plus, le blog ne sera peut-être pas mis à jour très fréquemment cette semaine. Je dois remplacer la bibliothèque WebSocket de l'entreprise cette semaine, ce qui est un casse-tête~ Bon, c'est tout pour le moment, merci~