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é 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 , 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
setMode
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- ( ) : 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 :
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
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~
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~