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
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~
, 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) :
, je plaisante~ Bon, sans plus attendre, commençons cette section !