2013-06-18 2 views
0

Android에서 java로 앱을 제작 중이며 버튼을 클릭 할 때마다 사운드가 재생됩니다. 잘 작동하지만 버튼을 한 번 누르면 재생되고 그 버튼이나 다른 버튼을 누르면 아무 것도하지 않습니다.Android 사운드는 한 번만 재생됩니다.

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity { 

Button s1, s2, s3, s4; 
MediaPlayer ss1, ss2, ss3, ss4; 

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

    s1 = (Button) findViewById(R.id.s1); 
    s2 = (Button) findViewById(R.id.s2); 
    s3 = (Button) findViewById(R.id.s3); 
    s4 = (Button) findViewById(R.id.s4); 

    s1.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      ss1 = MediaPlayer.create(MainActivity.this, R.raw.sound1); 
      ss1.start(); 
     } 
    }); 

    s2.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      ss2 = MediaPlayer.create(MainActivity.this, R.raw.sound2); 
      ss2.start(); 
     } 
    }); 

    s3.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      ss3 = MediaPlayer.create(MainActivity.this, R.raw.sound3); 
      ss3.start(); 
     } 
    }); 

    s4.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      ss4 = MediaPlayer.create(MainActivity.this, R.raw.sound4); 
      ss4.start(); 
     } 
    }); 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

어떻게 해결할 수 있습니까?

답변

3

왜 이런 식으로 시도하지 마십시오
MediaPlayer 하나만 사용하고 다시 사용하십시오. 이 같은 것이

MediaPlayer ss1; 
    s1 = (Button) findViewById(R.id.s1); 
    s2 = (Button) findViewById(R.id.s2); 
    s3 = (Button) findViewById(R.id.s3); 
    s4 = (Button) findViewById(R.id.s4); 


    s1.setOnClickListener(new View.OnClickListener(){  
      public void onClick(View v){ 
       ss1= new MediaPlayer(); 
       ss1= MediaPlayer.create(this, R.raw.sound1); 
       ss1.prepare(); 
       ss1.start(); 

     } 
    }); 
+0

감사합니다. 조금이라도 이것을 시험해보고 작동하는지 알려 주겠다. –

+0

나는 문제가있다. ss1.setDataSource (R.raw.sound1); MediaPlayer 형식의 메서드 setDataSource (String)가 인수 (int)에 적용 할 수 없다는 오류가 발생합니다. 해결책은 sound1의 형식을 string으로 변경하는 것입니다.하지만이 메서드는 R.java에서 오류를 발생시킵니다. 그것은 문자열에서 int로 변환 할 수 없으며 int로 변경하면 다시 같은 오류가 발생합니다. –

+0

대답을 편집했습니다. 예, assetFileDescriptor가 필요합니다. – MDMalik

관련 문제