当我按下按钮或摇动手机时,我正在尝试创建播放某个音频文件的应用程序,该应用程序之前已录制过。这是我的代码。
public class Reproduzir extends Activity implements SensorEventListener{
MediaPlayer player = new MediaPlayer();
SensorManager sensor;
@Override
protected void onCreate(Bundle savedInstanceState ){
super.onCreate(savedInstanceState);
sensor= (SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.reproduzir);
Button reproduzir = (Button) findViewById(R.id.reproduzir);
reproduzir.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
play();
}
});
Button fechar= (Button) findViewById(R.id.fechar);
fechar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (player.isPlaying()) {
player.stop();
player.release();
}
finish();
}
});
}
public void play(){
try {
player.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/2cp.3gp");
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onStart(){
super.onStart();
sensor.registerListener(this,sensor.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if(event.values[0]>10.2
||event.values[1]>10.2
||event.values[2]>10.2){
play();
}
}
}
我的问题是,当我运行它时,我只能播放一次。如果我再次按下按钮或再次摇动它,它什么都不做。有人可以帮忙吗?
答案 0 :(得分:6)
简单的解决方法是在player.reset()
方法之前调用play()
简单地添加player.setDataSource(...)
。
您只能在不重置播放器的情况下拨打setDataSource(...)
一次。在任何州调用reset()
是合法的(即使播放器尚未初始化)。
换句话说,即使您第一次拨打play()
,也可以在play()
方法中使用以下代码...
try {
player.reset();
player.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/2cp.3gp");
player.prepare();
player.start();
}
// Your catch blocks here
答案 1 :(得分:1)
尝试使用:
mediaPlayer.reset()
后:
mediaPlayer.stop()
而不是释放。
答案 2 :(得分:0)
您只能设置一次数据源。 每当用户按下按钮时,在你的代码中执行此操作:
player.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/2cp.3gp");
哪个错了。
你需要设置数据并准备一次并播放你想要的次数。
像这样: 把它放在你的onCreate:try {
player.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/2cp.3gp");
player.prepare();
player.start();
在onClick(View v)中,只需:
player.play();
答案 3 :(得分:-1)
长话短说 - 你必须使用:
setLooping(true)
有关媒体播放器的更多信息,请查看以下帖子。请记住状态图
http://developer.android.com/reference/android/media/MediaPlayer.html