如何在另一个活动中单击 ImageButton 时播放声音?

Ara*_*n S 2 audio android onclick android-mediaplayer android-imagebutton

我正在尝试创建图像按钮的方法。单击它时,背景音乐停止,图像按钮更改为另一个图像。再次按下时,它会像第一次一样返回并重播音乐。

我正在尝试一个布尔值。当它为真时,音乐开始,当它为假时,音乐开始,但它不起作用!

另外,我如何根据主要活动让另一个活动播放或停止音乐?

public class MainActivity extends AppCompatActivity {

    MediaPlayer mp;
    ImageButton SoundButton;
    ImageButton NoSoundButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SoundButton = new ImageButton(this);
        NoSoundButton = new ImageButton(this);
        /*---------Image Buttons--------*/

        SoundButton=(ImageButton) findViewById(R.id.sound);
        SoundButton.setVisibility(View.GONE);
        NoSoundButton=(ImageButton) findViewById(R.id.nosound);
        NoSoundButton.setVisibility(View.VISIBLE);

        /*---------Media Player--------*/

        mp = new MediaPlayer();
        mp = MediaPlayer.create(this, R.raw.aud);
        mp.setLooping(true);
        mp.start();
    }

    public void nosound(View view) {
        SoundButton.setVisibility(View.VISIBLE);
        NoSoundButton.setVisibility(View.INVISIBLE);
        mp.stop();
        mp.prepareAsync();
    }

    public void sound(View view) {
        SoundButton.setVisibility(View.INVISIBLE);
        NoSoundButton.setVisibility(View.VISIBLE);
        mp.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

Céd*_*ann 5

1)您必须更改 MediaPlayer 的初始化位置。

 MediaPlayer mp = new MediaPlayer();
Run Code Online (Sandbox Code Playgroud)
    public class MainActivity extends AppCompatActivity {

        boolean SoundStatus;
        MediaPlayer mp;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mp = new MediaPlayer();
            mp = MediaPlayer.create(this, R.raw.aud);
            mp.setLooping(true);
            mp.start();
        }
            public void sound(View view) {
            SoundStatus = true;
            if (SoundStatus) {
                mp.stop();
                SoundStatus = false;
            }
            else {
                mp.start();
                SoundStatus = true;
            }
        }}
Run Code Online (Sandbox Code Playgroud)

当然还要确保音频文件存在。


2)如何传递按钮状态

您可以在如下活动之间使用 Bundle 传递按钮状态

开始活动 2

Intent intent = new Intent(this, Activity2.class);
intent.putExtra(EXTRA_NAME, VALUE);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

在活动 2 中获取该值,例如

@Override
protected void onCreate(Bundle savedInstanceState) {
....
boolean value = getIntent().getExtras().getBoolean(EXTRA_VALUE);
}
Run Code Online (Sandbox Code Playgroud)

然后像上面一样做同样的事情,把它传递给活动 3。

或者

您可以在活动 1 中创建一个静态变量,然后从活动 3 访问它。