2016-08-12 294 views
2

我见过this后,但没有任何工作。这里是我当前的代码:Android - 快速点击后,点击按钮的按钮停止

private static MediaPlayer mp; 
public void onClick(View v) { 
    mp = new MediaPlayer(); 
    try { 
     mp.reset(); 
     AssetFileDescriptor afd; 
     afd = getAssets().openFd("click.mp3"); 
     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
     mp.prepare(); 
     mp.start(); 
    } catch (IllegalArgumentException | IllegalStateException | IOException e) { 
     e.printStackTrace(); 
    } 
    increment(button, key, this); 
} 

当我快速地按一下按钮,声音停止

回答

1

要解决它,你只需要添加:

if(mediaPlayer == null) 

您创建一个新的MediaPlayer之前。所以,在你的情况下:

if(mediaPlayer == null) 
    mediaPlayer = new MediaPlayer(); 

并确保mediaPlayer是一个全局变量。

+0

第二个选项是禁用点击按钮。但这是不正确的方式 –

+0

我得到警告“布尔型”mp == null'总是'false'“。这是真的? –

+0

请声明mp是全局变量 –

-1

就拿媒体播放器创建代码到其他地方最好的onCreate。无论如何,当你知道你要使用相同的数据源时,每次用户点击按钮时都不需要初始化数据源。

private static MediaPlayer mp; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //Set conntent view and other codes 

     try { 
       mp = new MediaPlayer(); 
       AssetFileDescriptor afd; 
       afd = getAssets().openFd("click.mp3"); 
       mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
       mp.prepare(); 

     } catch (IllegalArgumentException | IllegalStateException | IOException e) { 
       e.printStackTrace(); 
     } 

} 

public void onClick(View v) { 
     if (mp.isPlaying()) { 
       mp.stop(); 
       mp.reset(); 
     } 

     mp.start(); 

     increment(button, key, this); 
} 

@Override 
public void onDestroy() { 
     super.onDestroy(); 

     if (mp != null) { 
       mp.reset(); 
       mp.release(); 
     } 
} 
+0

我不应该重写'onDestroy'吗?当然是 –

+0

。刚刚编辑了代码。 – fluffyBatman

+0

我需要在'onCreate'尝试catch,而不是方法 –