【发布时间】:2014-04-01 00:05:27
【问题描述】:
我试过这段代码用 seekbar 实现音频播放。但是 seekbar 没有被调用。谁能告诉我我做错了什么?我想将录制时间限制设置为 2 分钟。这是我的代码,
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.option4);
startPlaying = (Button) findViewById(R.id.play);
stopPlaying = (Button) findViewById(R.id.stop);
startRecord = (Button) findViewById(R.id.start);
seekBar = (SeekBar) findViewById(R.id.seek_bar);
seekBar.setOnSeekBarChangeListener(this);
seekBar.setEnabled(false);
startRecord.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ditchMediaRecorder();
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
File outputFile=new File(mFileName);
if(outputFile.exists()){
outputFile.delete();
}
mRecorder=new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(mFileName);
try {
mRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRecorder.start();
}
});
startPlaying.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ditchMediaPlayer();
mPlayer=new MediaPlayer();
try {
mPlayer.setDataSource(mFileName);
} 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();
}
try {
mPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
seekBar.setEnabled(true);
seekBar.setMax(mPlayer.getDuration());
mPlayer.start();
new Thread().start();
}
});
stopPlaying.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mRecorder!=null){
mRecorder.stop();
}
}
});
}
private void ditchMediaPlayer() {
if(mPlayer!=null){
mPlayer.release();
}
}
private void ditchMediaRecorder() {
// TODO Auto-generated method stub
if(mRecorder!=null){
mRecorder.release();
}
}
@Override
public void run() {
int currentPosition = mPlayer.getCurrentPosition();
int total = mPlayer.getDuration();
System.out.println("In run");
while (mPlayer != null && currentPosition < total) {
try {
Thread.sleep(1000);
System.out.println("In run try block");
currentPosition = mPlayer.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return;
}
seekBar.setProgress(currentPosition);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
try {
System.out.println("In progres");
if (mPlayer.isPlaying() || mPlayer != null) {
if (fromUser)
mPlayer.seekTo(progress);
} else if (mPlayer== null) {
seekBar.setProgress(0);
}
} catch (Exception e) {
Log.e("seek bar", "" + e);
seekBar.setEnabled(false);
}
}
音频将被录制和播放,但我的搜索栏无法控制。我尝试了不同的方式,但我没有成功。请帮助我!!
谢谢!!!
【问题讨论】:
-
您是否遇到任何错误?
-
@JoelFernandes 我粘贴了我的错误跟踪
标签: android audio media-player playback seekbar