【问题标题】:Play Sound on after activity appears活动出现后播放声音
【发布时间】:2013-10-23 05:43:11
【问题描述】:

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

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

我尝试在 onCreate 方法中播放声音。它没有用。 onStart 和 继续。它有一些问题。每次活动恢复时都会播放。 有时我什至没有触摸设备!

在活动出现后播放声音的最佳方式是什么?

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();
}

【问题讨论】:

  • 你能提供你的代码吗?

标签: android android-activity


【解决方案1】:

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

  • 在 onSavedInstanceState 包中保存(已播放)状态并在 onCreate 中恢复
  • 在 OnCreate 或 onResume 中播放

【讨论】:

  • 正确,但我的活动不旋转。我将按照您的描述实现它,以防止无意义的播放声音。我认为它会起作用。我会回复你的。谢谢。
  • 最后一个问题 onResume 甚至 onPostResume 并没有阻止在视图出现之前播放声音!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多