【问题标题】:Play sound continuosly until user stops连续播放声音直到用户停止
【发布时间】:2019-05-07 23:27:55
【问题描述】:

我正在开发一个测试应用程序,当自动化测试过程完成时会播放警报声以通知操作员。

这个声音是3秒的闹钟铃声,我需要循环播放,直到用户触摸手机屏幕。

这是我实现媒体播放器的方式:

mp = MediaPlayer.create(MainActivity.this, R.raw.alarm);
    try {
        mp.prepare();
        mp.setLooping(true);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mp.start();
    }

我已经定义了mp.setLooping,它应该让声音连续播放,但它没有。

然后,停止触摸屏幕的声音:

@Override
public boolean onTouchEvent (MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        /*If sound is playing, stops*/
        if (mp.isPlaying()) {
            mp.stop();
        }
        return true;
    }
    return super.onTouchEvent(event);
}

那么如果mp.setLooping 不起作用,我应该如何让声音连续播放?

【问题讨论】:

    标签: android media-player


    【解决方案1】:

    当您使用create() 实例化 MediaPlayer 时,它会以准备好的状态返回,您不得在其上调用 prepare()。在您的情况下,这会引发异常,因此不会调用 mp.setLooping(true)

    【讨论】:

    • 这样工作!无论如何,现在我无法停止触摸屏幕的闹钟,声音一直在播放。 onTouchEvent 方法有什么问题?
    • 好吧,我有一个主要活动,我在其中管理所有全局方法以及定义此方法的位置,但 UI 由 3 个片段组成,我使用 viewPager 浏览它们。
    • 好的,迈克,你能用这种方法编辑你的帖子吗?还是和onTouchEvent结构一样?
    • 好的,我也会尝试使用 try catch 语句,也许有任何异常没有被捕获...不知道...
    • Mike,我已经能够在 logcat 中看到错误是什么,但我不知道如何解决。我现在要离开家,明天将使用 LogCat 更新帖子
    【解决方案2】:
    mp = MediaPlayer.create(MainActivity.this, R.raw.alarm);
    mp.start();
    mp.setLooping(true);
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多