按键音量变化?

时间:2011-08-13 23:45:40

标签: android eclipse

嘿伙计,所以当我运行我的应用程序时,它会进入主屏幕。从那里我点击了我的两个图像按钮之一和声音播放。我遇到的问题是,当我第一次按下按钮时,声音正常且响亮,按钮活动将我带到下一个布局。如果我从布局回到主屏幕并尝试再次按下按钮,我仍然可以听到声音,但几乎没有。有时几乎听不见。我怎样才能让声音始终保持一致?谢谢!

DragonFruitActivity.java

package com.Dragon_Fruit;

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;

public class DragonFruitActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // ***BUTTON SOUND***//
        final MediaPlayer buttonSound = MediaPlayer.create(
                DragonFruitActivity.this, R.raw.button_click);

        ImageButton playbutton = (ImageButton) findViewById(R.id.playbutton);
        playbutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                arg0.setBackgroundResource(R.drawable.playbuttonselected);
                // TODO Auto-generated method stub
                if(buttonSound.isPlaying()) {
                    buttonSound.stop();
                }

                try {
                    buttonSound.prepare();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                buttonSound.start();

                startActivity(new Intent(DragonFruitActivity.this,
                        playbutton.class));
            }

        });
        ImageButton settingsbutton = (ImageButton) findViewById(R.id.settingsbutton);
        settingsbutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(buttonSound.isPlaying()) {
                    buttonSound.stop();
                }

                try {
                    buttonSound.prepare();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                buttonSound.start();

                startActivity(new Intent(DragonFruitActivity.this,
                        settingsbutton.class));
            }

        });
    }
}

1 个答案:

答案 0 :(得分:0)

声音有多长?如果是非常短(<250ms),我在某些手机(摩托罗拉Atrix)上看到了一个问题,如果一段时间没有播放声音,音频驱动程序会进入睡眠状态。在这种情况下,由于音频驱动程序仍处于唤醒状态,因此当您第一次播放它们时,非常短的声音要么没有播放,要么非常安静。

我对此的解决方案,我一点也不高兴,是用几毫秒的低频声音(~20 Hz)填充声音的正面。

当您按下按钮时,您可以通过快速连续播放2-3次声音来验证这是否是您所看到的问题。如果后来响亮,那么这可能就是问题所在。

您可能还想考虑使用SoundPool来播放小声音。它将声音加载到内存中,以便更快地播放。