2013-06-18 154 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的类型更改为字符串,这是我做的,但在R.java中给出了一个错误,它不能将字符串转换为int,并将其更改为int会回到相同的错误。 –

+0

我编辑了答案,是的,您需要assetFileDescriptor – MDMalik