我使用媒体播放器在我的应用程序上播放声音。它运作得很好。
我在分离的线程上播放声音。甚至想到,在活动出现之前,部分声音会播放。
我尝试在onCreate方法上播放声音。它不起作用。 onStart和 的onResume。它有一些问题。它每次恢复活动时都会播放。 有时我甚至没有触摸设备!
活动出现后播放声音的最佳方式是什么?
public boolean played = false;
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (!played)
Settings.playSound(dvd.titleImageName.replace("png", "mp3"), this);
played = true;
}
public static MediaPlayer mp = null;
public static void playSound(String fileName, Context c)
{
//MediaPlayer mp = MediaPlayer.create(c, resId);
if (mp!=null)
{
mp.stop(); //error
mp.reset();
mp.release();
}
mp = new MediaPlayer();
AssetFileDescriptor descriptor;
try {
descriptor = c.getResources().getAssets().openFd("sounds/" + fileName);
mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
mp.prepare();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (mp == null) return;
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
}
});
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
}
});
mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
// TODO Auto-generated method stub
}
});
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mp.start();
}
}).start();
}
答案 0 :(得分:1)
您的played
变量仅在活动有效时才有效。如果它被杀死,played
不会保留。例如,旋转设备,您将再次听到声音播放。