如果传感器检测到一定量的移动,则播放歌曲

时间:2015-03-17 02:25:58

标签: java android loops nested-loops android-sensors

我基本上试图在传感器检测到运动变化时调用不同的歌曲,例如......

如果未检测到移动,则播放歌曲1。 如果检测到移动,则播放歌曲2。 否则,如果移动再次停止播放歌曲1。

到目前为止,我已经成功了,我现在正在播放上面的前两个If语句,然而,如果没有音乐播放器播放,我就无法将其恢复到歌曲1。我尝试过使用.pause();,但它似乎暂停一秒钟并且一次又一次地播放歌曲。

这是我到目前为止所做的:

public void onSensorChanged(SensorEvent se) {
            float x = se.values[0];
            float y = se.values[1];
            float z = se.values[2];
            mAccelLast = mAccelCurrent;
            mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
            float delta = mAccelCurrent - mAccelLast;
            mAccel = mAccel * 0.9f + delta; // perform low-cut filter

            mp1.start(); //song1 starts

            if (mAccel > 5) { // movement
                mp2.start(); // start song2
                if (mp2.isPlaying()) { // if song 2 is playing stop song1
                    mp1.stop();
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

使用1个媒体播放器对象,而不是其中2个。通过重新使用媒体播放器,您将确保一次只播放1个声音,同时保持较低的系统资源使用率。

创建一个新功能,停止媒体播放器,然后释放它:

private void stopPlaying() {
    if (mp != null) {
        mp.stop();
        mp.release();
        mp = null;
    }
}

然后添加一个功能来重新创建并启动使用新音频的媒体播放器。