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

标签 java android loops nested-loops android-sensors

每当传感器检测到运动变化时,我基本上都会尝试调用不同的歌曲...

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

到目前为止,我已经成功了,我现在正在播放上面的前两个 If 语句,但是,如果音乐播放器不自行播放,我无法将其返回到歌曲 1。我尝试过使用 .pause(); 但它似乎只暂停一秒钟并一遍又一遍地播放 Song1。

这是我到目前为止所拥有的:

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 个媒体播放器对象,而不是 2 个。通过重复使用媒体播放器,您将确保一次仅播放 1 个声音,同时保持较低的系统资源使用率。

创建一个新函数来停止媒体播放器然后释放它,如下所示:

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

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

关于java - 如果传感器检测到一定量的移动,则播放歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090300/

相关文章:

java - 类 GenericMemoryCell<T> 中的 GenericMemoryCell 无法应用于给定类型

java - Xpages ExtLibUtil.getCurrentSessionAsSigner() 返回 null

r - 在 R 中使用 prop.table 循环变量

java - Android 小部件的命名约定

php - 如何使用 Laravel Blade 通过 id 将评论链接到每个帖子

python - 流生成器。详细使用迭代器

java - 处理Json不存在的键Spring Boot

Java 验证 Java 代码中的 HTML 字符串

android - firebase AuthStateListener 如何工作?

java - 多个复选框。仅选择一项。如何获得它的值