0

我使用媒体播放器在我的应用程序上播放声音。它工作得很好。

我在一个单独的线程上播放声音。甚至想到,部分声音在活动出现之前播放。

我试图播放声音 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();
}
4

1 回答 1

1

您的played变量仅在活动有效时才有效。如果它被杀死,played则不会保留。例如,旋转您的设备,您将再次听到声音播放。

  • 在 onSavedInstanceState 包中保存状态(已播放)并在 onCreate 中恢复
  • 在 OnCreate 或 onResume 中播放
于 2013-10-22T21:43:11.337 回答