2015-01-29 5 views
6

전 API에서 21 회 설계된 Android 프로그래밍 비디오 강의 시리즈를 따르고 있습니다. 따라서 다음과 같은 방식으로 SoundPool 변수를 생성하라고 알려줍니다.API 21 용 SoundPool.Builder 클래스의 오디오 속성을 설정합니다.

SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
//SoundPool(int maxStreams, int streamType, int srcQuality) 

그러나 API 21에도이 SoundPool을 사용하고 싶습니다. 그래서, 나는이 일을하고있다 :

if((android.os.Build.VERSION.SDK_INT) == 21){ 
    sp21 = new SoundPool.Builder(); 
    sp21.setMaxStreams(5); 
    sp = sp21.build(); 
} 
else{ 
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
} 

SP21은 API (21)와 SP SoundPool 유형 인에 대한 Builder 유형의 변수입니다.

이것은 API 21을 사용하는 실제 AVD와 API 19를 사용하는 실제 장치에서 잘 작동합니다. API 21이 포함 된 실제 장치로 시도하지는 않았지만 잘 작동한다고 생각합니다. 이제 sp = sp21.build(); 전에 streamType을 if 블록에 USAGE_MEDIA으로 설정하고 싶습니다.

sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA); 

그러나 린트는 빨간색으로 표시하고 말한다 : 그래서 입력 유형 SoundPool.Builder에서

메소드 setAudioAttributes (AudioAttributes)는 인수 (INT)

적용 할 수 없습니다

내가 USAGE_MEDIA로 설정하지 않더라도 기본적으로 동일한 것으로 설정됩니다. 그러나 USAGE_ALARM과 같은 다른 것으로 설정해야한다면 나중에 참조 할 것을 요구합니다.

어떻게해야합니까?

제발 도와주세요!

나는 Audio Attributes, SoundPool, SoundPool.builderAudioManager을 참조했다.

답변

10

AudioAttributes 인스턴스는 해당 작성자 인 AudioAttributes.Builder를 통해 작성됩니다.

다음과 같은 방법으로 사용할 수 있습니다.

sp21.setAudioAttributes(new AudioAttributes.Builder() 
.setUsage(AudioAttributes.USAGE_MEDIA) 
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) 
.build()); 

참조 : https://developer.android.com/reference/android/media/AudioAttributes.html

+0

라인 # 3 –

9

내가 여기에 추가 할 수있는 뭔가가있다. 작고 간단한 ogg 오디오 파일을 재생하기 위해 게임 앱에서 SoundPool을 사용하고있었습니다. API 21을 사용하는 에뮬레이터에서도 제대로 작동했습니다. 오늘 SoundPool.Builder()를 사용하도록 수정했습니다.

Android의 SoundPool.Builder 문서를 살펴 보았습니다. 그것은 거기에있다

public static class 
SoundPool.Builder 
extends Object 
java.lang.Object 
↳ android.media.SoundPool.Builder 
Class Overview 
Builder class for SoundPool objects. 

"SoundPool 개체를위한 빌더 클래스"라는 줄에 유의하십시오. SoundPool.Builder()는 SoundPool 객체를 만듭니다. SoundPool()은 SoundPool 객체도 만듭니다. 이것이 내가 한 일입니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

     AudioAttributes audioAttrib = new AudioAttributes.Builder() 
       .setUsage(AudioAttributes.USAGE_GAME) 
       .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) 
       .build(); 
     mSound = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build(); 
    } 
    else { 

     mSound = new SoundPool(6, AudioManager.STREAM_MUSIC, 0); 
    } 

mSound이 (I로드, 재생, 정지, 릴리스 소리) 코드의

private SoundPool mSound; 

나머지로 선언하면 이전에 예전 그대로 남아있다. 그리고 그것은 API 21 및 이전 버전

희망에 노력하면이이 대답은 더 나은

+0

에서 (5) include.setMaxStreams 깜빡 모두 당신에게 도움이됩니다. – LukTar

+0

MediaPlayer.SetAudioAttributes() 메서드 호출에도 동일하게 적용됩니다. –