首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >强制android媒体播放器完成播放后再重新启动

强制android媒体播放器完成播放后再重新启动
EN

Stack Overflow用户
提问于 2016-09-23 04:03:36
回答 2查看 473关注 0票数 1

我正在开发一个使用加速度计的应用程序,当它检测到抖动时,它会播放raw文件夹中的声音。我的问题是,如果声音没有结束,我检测到一个新的摇动动作,它会再次触发声音,前一个将被取消。我希望在播放新的声音文件之前完成上一个声音文件。我怎样才能做到这一点呢?应该在传感器类还是在play类中完成?这是一个获取resid然后启动媒体播放器的类。

代码语言:javascript
运行
复制
public void Play(final int resid) {

    Log.d(TAG, "i Play(med resid)");
    if (mp != null && mp.isPlaying()) { //ta bort isplaying
        Log.v(TAG, "Reset");
        mp.reset();
        Log.v(TAG, "Release");
        mp.release();
    }
    if (resid == 0) {
        Toast.makeText(this, "Choose an instrument", Toast.LENGTH_SHORT).show();

    } else {

        Log.d(TAG,"Now playing!");
        mp = MediaPlayer.create(getApplicationContext(), resid);
        mp.start();
        int duration = mp.getDuration();
        Log.v(TAG, "Length: " + duration);
    }

}

这是其中一个传感器

代码语言:javascript
运行
复制
  public void TiltingSensor(SensorEvent event, int resid) {
    Sensor mSensor = event.sensor;
    if (mSensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        float x_axis = event.values[0];
        float y_axis = event.values[1];

        if ((x_axis < 9.80 && x_axis > 0.50) && (y_axis > -9 && y_axis < 0 )){
            //Log.d("Angles", Float.toString(x_axis) + "   Y:  " + Float.toString(y_axis));
            Play(resid);
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-09-23 07:37:43

是你在重启player:

代码语言:javascript
运行
复制
if (mp != null && mp.isPlaying()) { //ta bort isplaying
    Log.v(TAG, "Reset");
    mp.reset();
    Log.v(TAG, "Release");
    mp.release();
}

尝试将代码更改为:

代码语言:javascript
运行
复制
if (mp != null && mp.isPlaying()) {
    Log.v(TAG, "Already playing");
    return;
} else if (mp != null) { // it's better to release player
    Log.v(TAG, "Release");
    mp.release();
}
票数 0
EN

Stack Overflow用户

发布于 2016-09-23 11:28:43

如果您希望在第一次播放时检测到运动时再次启动音乐,则如果media player对isPlaying()返回true,则在返回之前在Play()中使用递增的引用计数。然后在oncompletionListener()中,递减引用计数并发送一条消息以再次调用Play()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39647962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档