AudioManager(pengurus audio)


Pengenalan kepada bahagian ini:

Dalam bahagian pertama multimedia, kami menggunakan SoundPool untuk menulis contoh Duang Selepas babi mengklik butang, ia tiba-tiba berbunyi "Duang". Satu bunyi, dan bunyinya sangat kuat pada masa itu, yang menakutkan bayi itu 1.jpg Mujurlah, ia bukan pada waktu bekerja, saya secara rahsia menulis blog untuk memberitahu pengurus Ia akan membunuh anda~ Baiklah, okey, apabila bercakap tentang kelantangan bunyi, kami perlu memperkenalkan API (kawalan kelantangan) yang disediakan oleh Android:

AudioManager (Pengurus Audio) Ya, kelas ini terletak di bawah pakej Android.Media dan menyediakan operasi berkaitan kawalan kelantangan dan mod nada dering! Dalam bahagian ini, kita akan belajar cara menggunakan bahan ini. Anda boleh menulis demo, senyap mudah Sebelum menonton filem pendek Masukkan Demo dan klik redam, kemudian 2.gif, bincang sahaja~ Nah, tanpa berlengah lagi, mari mulakan bahagian ini!

Dokumentasi API rasmi: AudioManager


1 Dapatkan contoh objek AudioManager

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


2. Penjelasan terperinci kaedah berkaitan

Kaedah biasa:

  • laraskanVolume(arah int, bendera int): Kawal kelantangan telefon bimbit, naikkan atau turunkan dengan satu unit, nilai mengikut parameter pertama AudioManager.ADJUST_LOWER, ia boleh dilaraskan ke bawah dengan satu unit; >, ia boleh dilaraskan dengan satu unit
  • adjustStreamVolume
  • (int streamType, arah int, bendera int): Sama seperti di atas, tetapi anda boleh memilih untuk melaraskan jenis bunyi 1) Parameter streamType menentukan jenis bunyi. Terdapat jenis bunyi berikut: STREAM_ALARM: penggera telefon mudah alih                                                                                                                                                                                                                                                                                                                                                                                                                            Nada dering STREAM_SYSTEAM: Sistem telefon mudah alih <🎜DTMF> : Nada
    :Panggilan suara 2) Parameter kedua adalah sama seperti yang di atas, menambah atau mengurangkan volum. 3) Bit bendera pilihan, seperti AudioManager.FLAG_SHOW_UI, paparan bar kemajuan, AudioManager.PLAY_SOUND: mainkan bunyi
    setStreamVolume(int streamType , indeks int, intflags): Tetapkan kelantangan terus
    getMode( ): Kembalikan mod audio semasa setMode( ): Tetapkan bunyi mod Terdapat mod berikut:
  • MODE_NORMAL
  • (biasa), MODE_RINGTONE(nada dering),
  • MODE_IN_CALL
  • (panggilan telefon), MODE_IN_KOMUNIKASI(panggilan
  • )
  • getRingerMode( ): Kembalikan mod nada dering semasa setRingerMode(int streamType): Tetapkan mod nada dering Terdapat beberapa mod: Seperti MODE_RINGER_NORMAL (biasa), MODE_RINGER_SENYAP
  • (bisu),
  • MODE_RINGER_VIBRATE (bergetar)
  • megetStreammegetStream ) : Dapatkan volum semasa telefon Nilai maksimum ialah 7 dan nilai minimum ialah 0. Apabila ditetapkan kepada 0, ia akan melaraskan secara automatik kepada mod getaran getStreamMaxVolume(int streamType): Dapatkan volum telefon tertentu Nilai volum maksimum jenis bunyi setStreamMute
  • (int streamType,boolean state): Tetapkan jenis bunyi tertentu pada telefon untuk meredamkan
  • setSpeakerphoneOn
  • (boolean on): Tetapkan sama ada hendak menghidupkan mikrofon
  • setMicrophoneMute
  • (boolean on): Tetapkan sama ada hendak meredamkan mikrofon
  • isMicrophoneMute
  • (): Tentukan sama ada mikrofon diredam atau dibuka
  • isMusicActive
  • (): Tentukan sama ada muzik aktif
  • isWiredHeadsetOn
  • (): Tentukan sama ada ia dimasukkan Fon Kepala
  • Kaedah lain:
    • abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl): Abaikan fokus audio
    • adjustSuggestedStreamVolume(int,intlagy): Laraskan kelantangan strim yang paling berkaitan, atau strim sandaran yang diberikan
    • getParameters(Kekunci rentetan): Tetapkan bilangan pembolehubah nilai parameter untuk perkakasan audio
    • getVibrateSetting(int vibrateType): Mengembalikan sama ada getaran pengguna ditetapkan kepada jenis getaran
    • isBluetoothA2dpOn(): Memeriksa sama ada penghalaan audio set kepala Bluetooth A2DP dihidupkan atau dimatikan
    • isBluetoothScoAvailableOffCall(): Menunjukkan sama ada platform semasa menyokong sarung panggilan mati menggunakan SCO
    • isBluetoothScoOn(): Menyemak sama ada komunikasi menggunakan Bluetooth SCO
    • loadSoundEffects(): Muatkan kesan bunyi
    • playSoundEffect((int effectType, kelantangan terapung): Mainkan kesan bunyi
    • egisterMediaButtonEventReceiver(ComponentName eventReceiver): Daftar satu-satunya penerima niat MEDIA_BUTTON komponen
    • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) Minta fokus audio
    • setBluetoothScoOn(boolean hidup): Minta untuk menggunakan set kepala Bluetooth SCO untuk komunikasi
    • startBluetoothSco/stopBluetoothSco()(): Mulakan /Hentikan sambungan audio Bluetooth SCO
    • unloadSoundEffects(): Nyahmuat kesan bunyi

    3. Contoh penggunaan

    Hei, terdapat banyak atribut, beberapa daripadanya melibatkan perkara seperti Bluetooth Di sini kami hanya menerangkan beberapa kaedah yang paling biasa!

    Jika anda menemui beberapa yang istimewa yang anda tidak pernah lihat sebelum ini, mari semak dokumentasi sekali lagi!

    Contoh mudah: gunakan Mediaplayer untuk memainkan muzik, dan laraskan kelantangan serta redamkan melalui AudioManager!

    Sebenarnya, mula-mula buat folder mentah di bawah res dan buang fail sumber MP3 ke dalamnya!

    Menjalankan pemaparan:

    3.gif

    Pelaksanaan kod:

    Kod Reka Letak

    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;
            }
        }
    }

    Kod ini masih sangat mudah, dan kaedah menetapkan redam ialah

    setStreamMute () tamat tempoh dalam API versi 23, Anda boleh menggunakan kaedah lain adjustStreamVolume(int, int, int), dan kemudian tetapkan sifat ketiga:

    ADJUST_MUTE atau ADJUST_UNMUTE!

    Sebenarnya, terdapat juga:

    Jika anda menetapkan getaran (Vibrator) dalam parameter ketiga

    adjustStreamVolume(), Anda perlu menambah kebenaran ini dalam AndroidManifest.xml!

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


    4. Muat turun contoh kod

    AudioManagerDemo.zip


    Ringkasan bahagian ini:

    Baiklah, bahagian ini menunjukkan kepada anda penggunaan mudah AudioManager untuk melaraskan kelantangan kelas ini tidak biasa digunakan oleh pengarang. Ayuh, jika ada kemahiran baru yang anda boleh dapat pada masa hadapan, sila tambahkannya~ Hehe, sudahkah anda menulis demo bisu? Ia perlu digabungkan dengan keperluan sebenar~4.gif

    Selain itu, blog mungkin tidak dikemas kini terlalu kerap minggu ini Saya perlu menggantikan perpustakaan WebSocket syarikat minggu ini, yang akan membuat saya sakit kepala~ Okey, itu sahaja, terima kasih~