Witam serdecznie
Piszę program, którego istotnym elementem jest potwierdzenie wyboru jednej z opcji odpowiedzi poprzez dźwięk. Na razie program ma po naciśnięciu przycisku Start rozpocząć nagrywanie i po sekundzie wyświetlić maksymalną amplitudę, jaka została zarejestrowana. Problem polega na tym, że po rozpoczęciu nagrywania nie dzieje się już nic 🙂 Tzn. program nagrywa, nagrywa, nagrywa, nagrywa aż do momentu, kiedy sam go zabiję. Program testuję na emulatorze. Co jest nie tak?
package com.sound;
import java.io.IOException;
import java.util.Random;
import android.app.Activity;
import android.media.*;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
/** Kwaknij to! - główna klasa programu */
public class sound extends Activity implements OnClickListener {
final MediaRecorder recorder = new MediaRecorder();
int amp;
boolean start=false;
Button button;
Thread myThread = new Thread(new MyThread());
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* Pobranie elementów z layout'u */
Button button = (Button) findViewById(R.id.Button);
button.setOnClickListener(this);
ImageView img = (ImageView) findViewById(R.id.ImageView01);
img.setImageResource(R.drawable.kwaknijto);
myThread.start();
}
/* Zarejestrowanie naciśnięcia przycisku i rozpoczęcie nagrywania */
public void onClick (View v){
if (v.getId() == R.id.Button){
Button button = (Button) findViewById(R.id.Button);
button.setEnabled(false);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/recout.3gpp");
amp = recorder.getMaxAmplitude();
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.d("Tag", e.toString());
} catch (IOException e) {
e.printStackTrace();
Log.d("Tag", e.toString());
}
recorder.start();
start=true;
}
}
class MyThread implements Runnable{
public void run() {
while(!Thread.currentThread().interrupted()){
if(start){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = Message.obtain();
msg.what=1;
start=false;
}
}
}
}
Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what==1){
amp = recorder.getMaxAmplitude();
recorder.stop();
button.setEnabled(true);
Toast.makeText(sound.this, String.valueOf(amp), Toast.LENGTH_LONG).show();
}
}
};
}