Android声音只播放一次
问题描述:
我在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;
}
}
我该如何解决这个问题?
答
为什么不试试这种方式
只能使用一个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();
}
});
好的,谢谢!我会稍微尝试一下,并告诉你它是否有效 –
我遇到问题了。 ss1.setDataSource(R.raw.sound1);给出了一个错误,即MediaPlayer类型中的方法setDataSource(String)不适用于参数(int),解决方案是将sound1的类型更改为字符串,这是我做的,但在R.java中给出了一个错误,它不能将字符串转换为int,并将其更改为int会回到相同的错误。 –
我编辑了答案,是的,您需要assetFileDescriptor – MDMalik