我试图在按下按钮时播放声音。为此,我尝试了几种方法:
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();
}
}
}
}
只是想我做得对吗?有没有更好更简单的方法?