0

我试图在按下按钮时播放声音。为此,我尝试了几种方法:

1:在下面创建一个 MediaPlayer 并在按下按钮时播放它,如下所示:

MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
    mp.setLooping(false);
    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            mp.seekTo(0);
            mp.start();
        }
    });
}

这种方法很有魅力。但是后来我想节省内存并想在活动处于后台时释放 MediaPlayer。所以我添加了这个

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    mp.release();
    super.onPause();
}

但是现在,当活动回到前台时,它会引发错误(因为 MediaPlayer 是在 OnCreate 下创建的)。所以,我想在 onResume 下创建它,因为它总是被调用。

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
    mp.setLooping(false);
    super.onResume();
}

有效。

完整代码是这样的:

package com.example.learn;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(this);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        mp.release();
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
        mp.setLooping(false);
        super.onResume();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.button1: {
            mp.seekTo(0);
            mp.start();
        }
        }

    }

}

只是想我做得对吗?有没有更好更简单的方法?

4

1 回答 1

0

通过查看您的代码,我认为您以正确的方式完成了它。您可以在 onResume 中创建它,因为它总是被调用。仅在第一次调用创建时。是的,总是打电话

mediaPlayer.relaese();

代替

mediaPlayer.stop();

您的代码中的所有内容看起来都正确。为了更准确,您可以浏览此 链接

于 2013-10-09T04:13:27.540 回答