public class MainActivity extends AppCompatActivity {
MediaPlayer mp;
public void buttonTapped(View view){
int id = view.getId();
String ourId = "";
ourId = view.getResources().getResourceEntryName(id);
int resourceId = getResources().getIdentifier(ourId, "raw", getPackageName());
mp = MediaPlayer.create(this, resourceId);
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
// Log.i("Stuff", viewId);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
答案 0 :(得分:1)
* * 中的代码应该可以解决问题。
public void buttonTapped(View view){
int id = view.getId();
String ourId = "";
ourId = view.getResources().getResourceEntryName(id);
int resourceId = getResources().getIdentifier(ourId, "raw", getPackageName());
***if(mp!=null){
mp.release();
mp=null;
}***
mp = MediaPlayer.create(this, resourceId);
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
// Log.i("Stuff", viewId);
}
答案 1 :(得分:0)
在setOnCompletionListener中你释放了mp,同时添加了mp = null。
答案 2 :(得分:0)
尝试以下代码: -
尝试
{
MediaPlayer mp = new MediaPlayer(); mp.setDataSource(birdsUrlList.get(位置).getUrl_audio());
mp.prepare();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@覆盖
public void onPrepared(MediaPlayer mp){
mp.start();
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@覆盖
public void onCompletion(MediaPlayer mp){ mp.stop()
mp.release();
}
});
// startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(birdsUrlList.get(位置).getUrl_video()))); } catch(例外e){ e.printStackTrace(); } }