AudioManager(오디오 관리자)
이 섹션 소개:
멀티미디어의 첫 번째 섹션에서는 SoundPool을 사용하여 Duang의 예를 작성했습니다. 돼지가 버튼을 클릭한 후 갑자기 "Duang" 소리가 들렸습니다. 소리 한 번, 아기가 무서워 죽을 정도로 소리가 커요 다행히 근무시간에는 아니어서 몰래 블로그에 글을 써서 매니저에게 알렸어요. 죽겠군요~ 글쎄, 음량에 관해서는 Android에서 제공하는 API(볼륨 조절)를 도입해야 합니다:
AudioManager(오디오 관리자) , 이 클래스는 Android.Media에 있습니다. 패키지에는 볼륨 조절, 벨소리 모드 관련 조작이 제공됩니다! 이 섹션에서는 이 기능을 사용하는 방법에 대해 알아보겠습니다. 짧은 영화를 보기 전에 먼저 간단한 음소거를 작성해 보세요. Demo에 들어가서 음소거를 클릭한 다음 , 그냥 이야기하세요~ 자, 더 이상 고민하지 말고 이 섹션을 시작하겠습니다!
공식 API 문서: AudioManager
1. AudioManager 객체 인스턴스 가져오기
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
2. 에 대한 자세한 설명 method
일반적으로 사용되는 방법:
- adjustVolume(int 방향, int 플래그): 휴대폰의 볼륨을 제어하고 한 단위씩 위아래로 조정하고 첫 번째 매개변수 AudioManager.ADJUST_LOWER에 따라 판단합니다. AudioManager.ADJUST_RAISE는 한 단위씩 높일 수 있습니다. 한 단위
- adjustStreamVolume(int streamType , int 방향, int 플래그): 위와 동일하지만 사운드 유형을 조정하도록 선택할 수 있습니다. 1) streamType 매개변수는 사운드 유형을 지정합니다. STREAM_ALARM: 휴대폰 알람 STREAM_MUSIC: 모바일 음악
STREAM_DTMF: 톤 STREAM_NOTIFICATION: 시스템 프롬프트
STREAM_VOICE_ 통화 : 음성통화 2) 두 번째 파라미터는 위와 동일하며 볼륨을 높이거나 낮추는 역할을 합니다. 3) AudioManager.FLAG_SHOW_UI, 진행률 표시줄 표시, AudioManager.
PLAY_SOUND와 같은 선택적 플래그 비트: 사운드 재생setStreamVolume(int streamType, int index, intflags): 볼륨 크기를 직접 설정- getMode (): 현재 오디오 모드를 반환합니다.
- setMode(): 사운드 모드를 설정합니다. 다음과 같은 모드가 있습니다: MODE_NORMAL
(일반),- MODE_RINGTONE(벨소리), MODE_IN_CALL(전화 통화), MODE_IN_COMMUNICATION(전화)getRingerMode( ): 현재 벨소리 모드를 반환합니다
- setRingerMode(int streamType): 벨소리 모드 설정 여러 가지 모드가 있습니다: 예: RINGER_MODE_NORMAL
(일반),- RINGER_MODE_SILENT(음소거), RINGER_MODE_VIBRATE(진동) getStreamVolume(int streamType): 휴대폰의 현재 볼륨을 가져옵니다. 최대값은 7이고 최소값은 0입니다. 0으로 설정하면 자동으로 진동 모드로 조정됩니다
- getStreamMaxVolume(int streamType): 특정 볼륨의 최대 볼륨 값을 가져옵니다. 전화기의 사운드 유형
- setStreamMute(int streamType, boolean state): 전화기의 특정 사운드 유형을 음소거로 설정
- setSpeakerphoneOn(boolean on): 스피커 켜기 여부 설정
- setMicrophoneMute (boolean on): 마이크 음소거 허용 여부를 설정합니다
- isMicrophoneMute(): 마이크가 음소거 또는 켜져 있는지 확인
- isMusicActive(): 음악이 활성 상태인지 확인
- isWiredHeadsetOn(): 여부 확인 헤드폰이 연결되어 있습니다
- 다른 방법
:
- abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl): 오디오 포커스 포기
- adjustSuggestedStreamVolume(int,int presentsStreamType intflags): 가장 관련성이 높은 스트림 또는 지정된 대체 스트림의 볼륨을 조정합니다.
- getParameters(문자열 키): 오디오 하드웨어에 대해 가변 개수의 매개변수 값을 설정합니다.
- getVibrateSetting(int vibrateType): 사용자의 진동은 진동 유형으로 설정됩니다.
- isBluetoothA2dpOn(): A2DP 블루투스 헤드셋 오디오 라우팅이 켜져 있는지 여부를 확인합니다.
- isBluetoothScoAvailableOffCall(): 현재 플랫폼이 SCO
- 를 사용하여 통화 외 사용 사례를 지원하는지 표시합니다. isBluetoothScoOn() : 통신에서 Bluetooth SCO
- loadSoundEffects(): 사운드 효과 로드
- playSoundEffect((int effectType, float Volume): 사운드 효과 재생
- egisterMediaButtonEventReceiver(ComponentName eventReceiver): 구성요소의 MEDIA_BUTTON 인텐트
- requestAudioFocus(AudioManager.OnAudioFocusChangeListener l, int streamType, int DurationHint)의 유일한 수신자를 등록합니다. 오디오 포커스 요청
- setBluetoothScoOn(boolean on): 통신에 Bluetooth SCO 헤드셋 사용 요청
- startBluetoothSco/stopBluetoothSco()(): Bluetooth SCO 오디오 연결 시작/중지
- unloadSoundEffects(): 사운드 언로드 효과
3. 사용 예
헤헤, Bluetooth와 같은 속성이 많이 포함되어 있습니다. 여기서는 가장 일반적인 방법 중 일부만 설명합니다.
이전에 보지 못한 특별한 것들을 발견했다면, 문서를 다시 확인해 보세요!
간단한 예: Mediaplayer를 사용하여 음악을 재생하고 AudioManager를 통해 볼륨과 음소거를 조정하세요!
그나저나 먼저 res 아래에 raw 폴더를 만들고 그 안에 MP3 리소스 파일을 넣으세요!
렌더링 실행:
코드 구현:
레이아웃 코드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; } } }코드는 다음과 같습니다. 여전히 매우 간단합니다. 예, 추가로 설정합니다. mute setStreamMute() 메서드는 API 버전 23에서 만료되었습니다. 다른 메서드인 adjustStreamVolume(int, int, int)을 사용한 다음 세 번째 속성인
ADJUST_MUTE 또는 ADJUST_UNMUTE을 설정할 수 있습니다!
그런데 다음도 있습니다:
adjustStreamVolume()의 세 번째 매개변수에 진동(진동기)을 설정하면, AndroidManifest.xml에 이 권한을 추가해야 합니다!
<**uses-permission android:name="android.permission.VIBRATE"**/>4. 코드 샘플 다운로드
이 섹션 요약:
좋아요, 이 섹션에서는 볼륨을 조정하기 위한 AudioManager의 간단한 사용법을 보여줍니다. 이 유형은 작성자가 일반적으로 사용하지 않습니다. 자, 앞으로 얻을 수 있는 새로운 스킬이 있다면 추가해주세요~ 헤헤, 뮤트 데모 작성은 끝났나요? 실제 요구 사항과 결합해야 합니다~
게다가 이번 주에는 회사의 WebSocket 라이브러리가 교체되므로 블로그가 너무 자주 업데이트되지 않을 수 있습니다. 알았어 그게 다야 고마워~