2013-08-22 103 views
0

我有以下代码:重放声音多次点击按钮

if (someId.matches("A") || someId.matches("a")) { 
     tvLetCap.setText("A"); 
     tvLetLow.setText("a"); 
     ivLetterIcon.setImageResource(R.drawable.apple); 
     btnDisplayWord.setText("A is for APPLE"); 
     mpSound = MediaPlayer.create(this, R.raw.sound); 
     mpSound.setLooping(false); 
     btnPlay.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       /*try { 
        Uri uri = Uri.parse("android.resource://com.mypack.testing/" + R.raw.sound); 
        mpSound.setDataSource(getApplicationContext(),uri); 
        mpSound.prepare(); 
        */ 
        mpSound.start(); 
        btnPlay.setVisibility(View.GONE); 
        btnStop.setVisibility(View.VISIBLE); 
        btnStop.setOnClickListener(stopSound); 
       /*} 
       catch (IOException e){ 
        Log.e("REPLAYING", "prepare() failed"); 
       }*/ 
      } 
     }); 
     mpSound.setOnCompletionListener(new OnCompletionListener() { 
      public void onCompletion(MediaPlayer mp) { 
       mpSound.release(); 
       btnPlay.setVisibility(View.VISIBLE); 
       btnStop.setVisibility(View.GONE); 
      } 
     }); 
    } 

它起着罚款代码注释,但每当我试图重新播放文件我的应用程序FC。声音文件位于res/raw/sound.mp3

如何修改代码,使其播放的次数与按下btnPlay的次数相同。

回答

1

您已经发布了媒体播放器。如果你想重用它,不要这样做。

+0

仅在onDestroy()期间使用它? –

+0

是的,如果这是你唯一一次完成它。但是一旦你调用它,你就不能再使用这个对象了。 –

+0

直到我回到我猜测的活动? –

1

有用于媒体播放器的一些方法... http://developer.android.com/reference/android/media/MediaPlayer.html

也许你需要的onClick方法使用mpSound.reset()的按钮(前一段时间我有这样的错误:P)? :)

+0

别人说不要用它... –

+0

有一个问题 - 为什么?如果它有效,就使用它;)也许它不是超优化的,但我们不写入人工智能或解决优化问题(那么我们应该至少使用C++语言:P)。今天的电话足够强大的重启媒体播放器在几毫秒(并在同一时间有100个其他任务),所以我们可以利用它:P – Krystian

+0

它的工作!哈哈谢谢 ;) –

相关问题