마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오 MediaPlayer와 SoundPool 관련 질문입니다.

0 추천
질문이 총 두 개입니다.

 

ABC 클래스의 버튼을 누를 때마다

소리를 재생 시키는 코드를 만들었습니다.

 

소리 종류가 한 10가지 정도 되기 때문에

소리만을 따로 관리하는 Sound 클래스를 만들었죠.

 

그리고 소리를 안나게 하고 싶을 경우를 위해서

Option 클래스도 만들었습니다.

 

Option 클래스에는 boolean형 변수 getCheck와

체크박스 한 개가 있습니다. 체크가 되어 있으면

getCheck에게 true를 설정하고, 체크가 되어있지 않으면

getCheck에게 false를 반환합니다.

(변수 getCheck는 static으로 선언되어 있음)

 

대충 이렇게 준비해놓고 소리를 재생시키는 코드를

만들었습니다. 대충 아래와 같은 방식으로 되어 있습니다.

 

------------------------------

 

public class ABC extends Activity
{
   private Sound sound = new Sound();
   private Button button;

 

   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

 

      button = (RelativeLayout)findViewById(R.id.soundButton);
      button.setOnClickListener(new View.OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
            if(Option.getCheck == true)
               soundLoad(1);
         }
      }
   }

 

   public void soundLoad(int a)
   {
      sound.soundPlay(this, a);
   }
}

 

------------------------------

 

public class Sound
{
   private MediaPlayer mp;

 

   public void soundPlay(Context context, int a)
   {
      if(a == 1)
      {
         mp = MediaPlayer.create(context, R.raw.push51_b);
         mp.start();
      }

 

      if(a == 2)
      {
         mp = MediaPlayer.create(context, R.raw.puu30);
         mp.start();
      }
   }
}

 

------------------------------

 

public class Option extends Activity
{
   private CheckBox check;
   static boolean getCheck = true;

 

   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.option);

 

      check = (CheckBox)findViewById(R.id.soundCheckBox);

 

      check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
      {
         @Override
         public void onCheckedChanged(CompoundButton compoundButton, boolean b)
         {
            getCheck = b;
         }
      });
   }
}

 

------------------------------

 

코드는 이런 식으로 되어 있습니다.

이렇게 하고 앱을 실행하면 초반에는 소리가

잘 납니다. 옵션 기능도 아무 탈 없이 잘 작동 되구요.

 

그런데, 여기서 문제가 발생합니다.

질문이 총 두개인데요.

 

1.

시간이 조금 지나거나 버튼을 계속 여러번

연속해서 누르면 이상하게 그때부터 소리가 나지를

않더라구요. 옵션을 껐다 켜봤는데도 소리가 안났었구요.

 

앱을 아예 종료시켰다가 다시 실행하면 정상적으로

작동 합니다만, 또 시간 지나거나 버튼 연타하면 소리 안나구요.

 

2.

원래는 MediaPlayer가 아닌 SoundPool을

사용하려고 했었는데요. SoundPool을 사용하려고 하면

SoundPool 인스턴스 생성 문장의 가운데에 줄이 확 그어졌습니다.

 

이게 뭐지 하면서 마우스를 갖다 대보니 아래와 같은

영문장이 뜨더군요.

This inspection reports where deprecated code is used in the specified inspection scope.

스코프가 적절하지 않다는 문장인 거 같은데 ...

 

문제는 이 SoundPool을 어디서 사용하려고 하던지 간에

줄이 그어지면서 스코프 부적절 메세지가 뜨는 현상이

똑같이 발생한다는 겁니다.

 

이상으로, 짧지 않은 질문을 두 개나 했습니다...

하지만 이 문제때문에 진도를 못 나가고 있어서

너무 골치 아픈 상황이에요. ㅠㅠ

제 힘으로 해결하려 해봤지만 역부족입니다.

도와주세요. ㅜㅜ
abchs8wyw (1,710 포인트) 님이 2016년 11월 14일 질문

1개의 답변

0 추천
첫째는 모르겠고

둘째번은 해당 생성자가 deprecated 되었으니 새로운방법을 쓰라는 겁니다

sdk 21부터 분기처리 해주시면 됩니다.

http://stackoverflow.com/questions/39184157/android-why-is-the-constructor-for-soundpool-deprecated
익명사용자 님이 2016년 11월 14일 답변
...