我目前正在构建一个带有按钮的应用程序,一旦用户单击该按钮,媒体记录器就会启动并记录五秒钟,然后停止。然后,将录制的内容加载到媒体播放器中,然后用户可以再次按下该按钮进行播放。到目前为止,这是我的代码:
OUTPUT_FILE = Environment.getExternalStorageDirectory() + "/tempRecord.3gpp";
audioSample1 = (Button) findViewById(R.id.sample1);
// button background drawable is grey_button
final Drawable buttonBackground = audioSample1.getBackground();
audioSample1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (audioSample1.getBackground().equals(buttonBackground)) {
Log.d("Button", "Start Record");
try {
startRecord();
} catch (Exception e) {
e.printStackTrace();
}
}
else if (audioSample1.getBackground() != null) {
Log.d("Button", "Start Playback");
try {
startPlayback();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
public void startRecord() throws Exception {
if (recorder != null) {
recorder.release();
}
File fileOut = new File(OUTPUT_FILE);
if (fileOut != null) {
fileOut.delete();
}
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(OUTPUT_FILE);
recorder.setAudioSamplingRate(44100);
recorder.setMaxDuration(5000);
recorder.prepare();
recorder.start();
audioSample1.setBackgroundResource(R.drawable.red_button);
recorder.setOnInfoListener(new OnInfoListener() {
public void onInfo(MediaRecorder recorder, int timer, int extra) {
if (timer == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
Log.v("Recorder", "Maximum Duration Reached");
recorder.stop();
audioSample1.setBackgroundResource(R.drawable.green_button);
}
}
});
}
public void startPlayback() throws Exception {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(OUTPUT_FILE);
mediaPlayer.prepare();
mediaPlayer.start();
}
}
基本上,我遇到的问题是该onClick
方法检测按钮的状态,并根据可绘制背景的背景来开始记录或开始播放。如果按钮处于其第一状态,drawable.grey_button
则媒体记录器将开始记录并将可绘制背景变为红色按钮,完成记录后,它将变为绿色按钮以进行播放。此代码通常可以正常工作,但是如果用户在媒体记录器记录时按下按钮,则媒体播放器将无法创建媒体播放器。我知道问题是因为我在打电话,audioSample1.getBackground() != null
但我找不到其他方法来检测backgroundResources
已更改的
请有人可以给我一些有关如何检测每个对象的建议backgroundResource
吗?
同样,一旦Media Player加载了音频样本,我现在希望同一按钮能够实现onTouchListener
和手势检测器。这可能吗,您如何实现这种方法?
谢谢
您的方法确实很乏味,但这是 使用它代替返回按钮的可绘制集。 getBackgroundDrawable();
getBackground()
但您也可以将字符串用作按钮,这可能很简单...
编辑1 这种方法更好
Button b = new Button(this); // now this is your button
b.setText("Play"); //the button has a name as 'play' when its not clicked
// and in your case is drawable.grey_button
b.setBackgroundResource(R.drawable.grey_button);
b.setOnClickListener(new OnClickListener() {//setting your onclick
@Override
public void onClick(View arg0) {
Button bb = (Button) arg0; // getting your clicked button
if(bb.getText().toString().equals("play")){ // checking if the text on your bb is play
//start your playback and change the background
bb.setText("pause"); // setting the text to pause
}else if(bb.getText().toString().equals("pause")){
//pause playback and change your background
bb.setText("play");
}else{
//stop play and reset mediaplayer and change your background..
// this is not even captured
}
}
});
这种方法更好..让我知道是否有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句