2013-06-18 396 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