一丶AudioManager 简介

提供对音量和铃声模式控制的访问
官网API

二丶实现控制音频

这里我们加入MediaPlayer播放音乐,让声音变化更明显一点,如果不了解MediaPlayer,请参考:Android MediaPlayer 实现音乐播放器节学习一下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">
    
    <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>
public class MainActivity extends AppCompatActivity {
    private Button btnStart,btnStop,btnHigher,btnLower,btnQuite;
    private MediaPlayer mediaPlayer;
    private AudioManager audioManager;
    //定义一个标志用来标示是否点击了静音按钮
    private int flag = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获得系统的音频对象
        audioManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
        //初始化 mediaPlayer对象,这里播放的是raw文件中的mp3资源
        mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.xiaye);
        //设置循环播放
        mediaPlayer.setLooping(true);
        bindViews();
        setOnClick();
    }

    private void bindViews(){
        btnStart = findViewById(R.id.btn_start);
        btnStop = findViewById(R.id.btn_stop);
        btnHigher = findViewById(R.id.btn_higher);
        btnLower = findViewById(R.id.btn_lower);
        btnQuite = findViewById(R.id.btn_quite);
    }

    private void setOnClick() {
        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                btnStop.setEnabled(true);
                mediaPlayer.start();    //播放
                btnStart.setEnabled(false);
            }
        });
        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                btnStart.setEnabled(true);
                mediaPlayer.pause(); //暂停
                btnStop.setEnabled(false);
            }
        });
        btnHigher.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //指定调节音乐的音频,增大音量,而且显示音量图形示意
                audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FLAG_SHOW_UI);
            }
        });
        btnLower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //指定调节音乐的音频,降低音量,只有声音,不显示图形条
                audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,AudioManager.FLAG_PLAY_SOUND);
            }
        });
        btnQuite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //指定调节音乐的音频,根据isChecked确定是否需要静音
                flag *= -1;
                if (flag == -1){
                    //将指定类型的声音调整为静音
                    audioManager.setStreamMute(AudioManager.STREAM_MUSIC,true); //API 23 过期
                    //audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_MUTE,AudioManager.FLAG_SHOW_UI);  //23以上的版本用这个
                    btnQuite.setText("取消静音");
                }else {
                    //取消静音
                    audioManager.setStreamMute(AudioManager.STREAM_MUSIC,false);
                    //audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_UNMUTE,AudioManager.FLAG_SHOW_UI);
                    //关闭麦克风
                    audioManager.setMicrophoneMute(false);
                    btnQuite.setText("静音");
                }
            }
        });
    }
}

三丶总结

AudioManager,简单来说就是用来控制系统音量和声音模式的,更多其他API请参考官网,每个方法的含义我们都在对应代码块做了详细的说明,好了,那本节先到这里,有疑问可以加我主页QQ,VX。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐